2014-12-13 86 views
4

分開後,我有如下所示加入項目由分隔符

list_1 = ['>name', 'aaa', 'bbb', '>name_1', 'ccc', '>name_2', 'ddd', 'eee', 'fff'] 

我試圖加入的項目之間的項目與「>」符號列表,所以,我想的是:

list_1 = ['>name', 'aaabbb', '>name_1', 'ccc', '>name_2', 'dddeeefff'] 

我如何能做到這一點在Python

回答

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) 

產生一個新的列表,然後從你的輸入,通過所產生的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'] 
+0

我會用我想是'str.startswith'。 – thefourtheye 2014-12-13 08:53:09

+0

@thefourtheye:對於1個字符的測試,我發現使用1個字符的切片更容易。我會更新,因爲它可能會更清晰。 – 2014-12-13 08:53:55

+0

@thefourtheye:切片速度更快(不需要方法調用,因此不需要屬性查找等),而對於固定長度測試也同樣簡單。當方法的輸入是動態或元組時,str.startswith()開始發光。 – 2014-12-13 08:56:00

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'] 

的唯一情況來監視這裏是如果您沒有>標誌之間的項目,這需要一個簡單的修復。

>>> 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 sand object()(這是唯一的),並且處理每一個可能的情況下