加入由分隔符分隔的python列表中的项目

Wil*_*Mak 4 python list delimiter

我有一个如下列表

list_1 = ['>name', 'aaa', 'bbb', '>name_1', 'ccc', '>name_2', 'ddd', 'eee', 'fff']
Run Code Online (Sandbox Code Playgroud)

我试图用">"符号加入项目之间的项目.所以我想要的是:

list_1 = ['>name', 'aaabbb', '>name_1', 'ccc', '>name_2', 'dddeeefff']
Run Code Online (Sandbox Code Playgroud)

我怎么能在python中做到这一点?

Mar*_*ers 5

使用发电机功能; 这使您可以控制项目"完成"以产生:

def join_unescaped(it):
    tojoin = []
    for element in it:
        if element.startswith('>'):
            if tojoin:
                yield ''.join(tojoin)
                tojoin = []
            yield element
        else:
            tojoin.append(element)
    if tojoin:
        yield ''.join(tojoin)
Run Code Online (Sandbox Code Playgroud)

要从输入生成新列表,请将生成的生成器对象传递给list()函数:

result = list(join_unescaped(list_1))
Run Code Online (Sandbox Code Playgroud)

演示:

>>> list_1 = ['>name', 'aaa', 'bbb', '>name_1', 'ccc', '>name_2', 'ddd', 'eee', 'fff']
>>> def join_unescaped(it):
...     tojoin = []
...     for element in it:
...         if element.startswith('>'):
...             if tojoin:
...                 yield ''.join(tojoin)
...                 tojoin = []
...             yield element
...         else:
...             tojoin.append(element)
...     if tojoin:
...         yield ''.join(tojoin)
... 
>>> list(join_unescaped(list_1))
['>name', 'aaabbb', '>name_1', 'ccc', '>name_2', 'dddeeefff']
Run Code Online (Sandbox Code Playgroud)


jam*_*lak 5

>>> from itertools import groupby
>>> list_1 = ['>name', 'aaa', 'bbb', '>name_1', 'ccc', '>name_2', 'ddd', 'eee', 'fff']
>>> [''.join(v) for k, v in groupby(list_1, key=lambda s: s.startswith('>'))]
['>name', 'aaabbb', '>name_1', 'ccc', '>name_2', 'dddeeefff']
Run Code Online (Sandbox Code Playgroud)

这里唯一值得注意的是,如果>标牌之间没有物品,则需要简单的修理.

>>> list_1 = ['>name', '>name0', 'aaa', 'bbb', '>name_1', 'ccc', '>name_2', 'ddd', 'eee', 'fff']
>>> [''.join(v) for k,v in groupby(list_1,key=lambda s:s.startswith('>')and s)]
['>name', '>name0', 'aaabbb', '>name_1', 'ccc', '>name_2', 'dddeeefff']
Run Code Online (Sandbox Code Playgroud)

子注意:只是在极不可能的情况下,你可以有重复的 >names,['>name', '>name', 'aaa'....]只需更改and sand object()(这是唯一的)并处理每个可能的情况