所以我有一个这样的字符串:
'|item1|item2|item3|item4'
从那个字符串,我想建立一个这样的列表:
['|item1','|item1|item2','|item1|item2|item3','|item1|item2|item3|item4']
它基本上寻找每个'|' 并从该位置返回前一个字符串。
所以我有一个这样的字符串:
'|item1|item2|item3|item4'
从那个字符串,我想建立一个这样的列表:
['|item1','|item1|item2','|item1|item2|item3','|item1|item2|item3|item4']
它基本上寻找每个'|' 并从该位置返回前一个字符串。
无需使用正则表达式:
stack = []
result = []
for elem in inputstring.split('|'):
if not elem: continue
stack.append(elem)
result.append('|' + '|'.join(stack))
产生:
>>> result
['|item1', '|item1|item2', '|item1|item2|item3', '|item1|item2|item3|item4']
您也可以使用生成器来执行此操作:
def generate_items(inputstring):
stack = []
for elem in inputstring.split('|'):
if not elem: continue
stack.append(elem)
yield '|' + '|'.join(stack)
for item in generate_items(inputstring):
print item
这个问题有一个列表解决方案:
out = []
for piece in items[1:].split('|'):
out.append((out[-1] if len(out) else '') + '|' + piece)
如果你喜欢生成器:
def generate_items(inputstring):
curr = ''
for item in inputstring[1:].split('|'):
curr += '|' + item
yield curr
最简单的方法:
list(itertools.accumulate(re.findall('\|\w+', '|item1|item2|item3|item4')))