我有一个函数接收一个点分隔的字符串。我想循环遍历这个值,并为每个级别运行一些代码。这是一个实现:
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 :(得分: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'
>>>