2017-03-08 48 views
1
LIST=['insert_job: aaa', 'box_name: bbb', 'insert_job: ccc', 
     'box_name: ddd', 'insert_job: eee', 'insert_job: fff', 
     'box_name: ggg'] 

在上面列表中,如果有2個連續insert_job: ('insert_job: eee', 'insert_job: fff')然後我想打印第一insert_job:在這種情況下會insert_job: eee比較和提取清單字符串蟒蛇

+1

使用字典 – abccd

+0

已經是一個名爲'LIST' – Gang

+3

@Gang庵的字典,它是一個列表。 –

回答

1

你可以做到這一點使用itertools.groupby

from itertools import groupby 

LIST = ['insert_job: aaa', 'box_name: bbb', 'insert_job: ccc', 
     'box_name: ddd', 'insert_job: eee', 'insert_job: fff', 
     'box_name: ggg'] 

for k, g in groupby(LIST, lambda s: s.split(':')[0]): 
    if k == 'insert_job': 
     items = list(g) 
     if len(items) > 1: 
      print(*items[:-1]) 
+0

感謝ShadowRanger,我不知道爲什麼對我而言,我是這麼做的。 –

+0

爲什麼downvote? –

+0

@ - 史蒂芬薩默斯 - 我在這裏是新的,仍然習慣於可用的選項,我沒有意識到我做出了投票,這是錯誤的,我現在想改變它,但它不工作。但我真的感謝您對此的快速回答,這正是我所需要的。 – Frank

0

因爲您需要項目的順序,所以您不需要字典。試試如下

seen = 0 
for i in LIST: 
    if i.startswith("insert_job"): 
     if seen: 
      continue 
     else: 
      seen = 1 
      print i 
    else: 
     seen=0 
     # print i 
+1

迭代過程中的變異列表在很多情況下都不會正確運行,並且在'O(n)'中可以輕易解決時,重複調用'remove'就意味着'O(n ** 2)'工作。當OP的既定目標是過濾輸出時,這也破壞了原始「列表」中的數據,而沒有指出數據應該被丟棄。 – ShadowRanger

+0

正確他不需要刪除項目 –

+0

我同意推送到一個新列表並不是最好的解決方案,但更清晰 – Gang