2013-05-14 59 views
1

我有一个函数接收一个点分隔的字符串。我想循环通过构建它的这个值并为每个级别运行一些代码。这是一个实现:这个字符串分割循环的更简单的实现

def example(name): 
    module = [] 
    for i in name.split('.'): 
     module.append(i) 
     print '.'.join(module) 
     #do some stuff here 

输出

>>> example('a.b.c.d') 
a 
a.b 
a.b.c 
a.b.c.d 

但感觉很长篇大论。我正在寻找更简单,更清洁或更短的实施。

+0

对于一般'#do一些东西here',我认为这是正确的做法。 – chepner 2013-05-14 17:36:37

+0

看起来相当干净。您可以缩短它的时间,但我认为您不会更容易阅读。 – maxy 2013-05-14 17:37:38

回答

5

分裂一次,然后切片它:

s = 'a.b.c.d' 

items = s.split('.') 
print [items[:i] for i in xrange(1, len(items) + 1)] 
# [['a'], ['a', 'b'], ['a', 'b', 'c'], ['a', 'b', 'c', 'd']] 
+1

在他的例子中,循环体的其余部分呢? – chepner 2013-05-14 17:37:30

0

如果您正在使用Python 3,那么你应该使用itertools.accumulate这样的:

>>> from itertools import accumulate 
>>> txt = 'a.b.c.d' 
>>> list(accumulate(txt.split('.'), lambda x,y: x + '.' + y)) 
['a', 'a.b', 'a.b.c', 'a.b.c.d'] 
>>> def example(txt): 
    for module in accumulate(txt.split('.'), lambda x,y: x + '.' + y): 
     print('Done stuff with %r' % module) 

>>> example('a.b.c.d') 
Done stuff with 'a' 
Done stuff with 'a.b' 
Done stuff with 'a.b.c' 
Done stuff with 'a.b.c.d' 
>>>