分開後,我有如下所示加入項目由分隔符
list_1 = ['>name', 'aaa', 'bbb', '>name_1', 'ccc', '>name_2', 'ddd', 'eee', 'fff']
我試圖加入的項目之間的項目與「>」符號列表,所以,我想的是:
list_1 = ['>name', 'aaabbb', '>name_1', 'ccc', '>name_2', 'dddeeefff']
我如何能做到這一點在Python
分開後,我有如下所示加入項目由分隔符
list_1 = ['>name', 'aaa', 'bbb', '>name_1', 'ccc', '>name_2', 'ddd', 'eee', 'fff']
我試圖加入的項目之間的項目與「>」符號列表,所以,我想的是:
list_1 = ['>name', 'aaabbb', '>name_1', 'ccc', '>name_2', 'dddeeefff']
我如何能做到這一點在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)
產生一個新的列表,然後從你的輸入,通過所產生的list()
函數發生器對象:
result = list(join_unescaped(list_1))
演示:
>>> 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']
>>> 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']
的唯一情況來監視這裏是如果您沒有>
標誌之間的項目,這需要一個簡單的修復。
>>> 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']
Sub注意:只是,你可以有重複>name
就像['>name', '>name', 'aaa'....]
極不可能的情況下,只是改變and s
到and object()
(這是唯一的),並且處理每一個可能的情況下
我會用我想是'str.startswith'。 – thefourtheye 2014-12-13 08:53:09
@thefourtheye:對於1個字符的測試,我發現使用1個字符的切片更容易。我會更新,因爲它可能會更清晰。 – 2014-12-13 08:53:55
@thefourtheye:切片速度更快(不需要方法調用,因此不需要屬性查找等),而對於固定長度測試也同樣簡單。當方法的輸入是動態或元組時,str.startswith()開始發光。 – 2014-12-13 08:56:00