0

So I have a string like this:

'|item1|item2|item3|item4'

From that string, I want to build an list like this:

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

It essentially looks for each '|' and returns the previous string from that position.

4

3 に答える 3

2

No need to use a regular expression:

stack = []
result = []
for elem in inputstring.split('|'):
    if not elem: continue
    stack.append(elem)
    result.append('|' + '|'.join(stack))

which produces:

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

You could do this with a generator too:

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
于 2013-03-09T23:32:30.370 に答える
1

この問題には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
于 2013-03-09T23:46:31.653 に答える
1

The easiest way to do it:

list(itertools.accumulate(re.findall('\|\w+', '|item1|item2|item3|item4')))
于 2013-03-09T23:54:45.443 に答える