2013-03-09 1 views
0

Поэтому у меня есть строка, как это:повторно список строк позиции строитель

'|item1|item2|item3|item4' 

Из этой строки, я хочу, чтобы создать список, как это:

['|item1','|item1|item2','|item1|item2|item3','|item1|item2|item3|item4'] 

Это по существу выглядит для каждого «| ' и возвращает предыдущую строку из этой позиции.

ответ

2

Нет необходимости использовать регулярное выражение:

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 
1

Существует один список решение этой проблемы:

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 
1

Самый простой способ сделать это:

list(itertools.accumulate(re.findall('\|\w+', '|item1|item2|item3|item4'))) 
Смежные вопросы