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

但是感觉很啰嗦。我正在寻找更简单、更简洁或更短的实现。

4

2 回答 2

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']]
于 2013-05-14T17:24:09.967 回答
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'
>>> 
于 2013-05-14T17:43:30.923 回答