这个字符串拆分循环的实现更简单

时间:2013-05-14 17:21:28

标签: python

我有一个函数接收一个点分隔的字符串。我想循环遍历这个值,并为每个级别运行一些代码。这是一个实现:

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

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

2 个答案:

答案 0 :(得分: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 :(得分: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'
>>>