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中做到这一点?
使用发电机功能; 这使您可以控制项目"完成"以产生:
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)
>>> 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)
子注意:只是在极不可能的情况下,你可以有重复的 >name
s,['>name', '>name', 'aaa'....]
只需更改and s
为and object()
(这是唯一的)并处理每个可能的情况
归档时间: |
|
查看次数: |
216 次 |
最近记录: |