2016-06-27 77 views
-1

我有一個字符串列表看起來像這樣的字符串列表:蟒蛇:篩選基於字符串名稱

li1 = ['pin 2.3','vlo 5.4', 'lu 1.3', '3 packages installed', '', 'bla'] 

l12 = ['pin 2.3','vlo 5.4', '2 packages installed', 'bla', 'bla'] 

我想從字符串「X安裝的軟件包」列表過濾掉那些後面有:

out1 = ['pin 2.3','vlo 5.4', 'lu 1.3'] 


out2 = ['pin 2.3','vlo 5.4'] 

我該如何使用列表理解?感謝

回答

6

您可以使用itertools.takewhile,這需要從列表中的項目,直到給定的條件不過去了:

from itertools import takewhile 

l12 = ['pin 2.3','vlo 5.4', '2 packages installed', 'bla', 'bla'] 
li1 = ['pin 2.3','vlo 5.4', 'lu 1.3', '3 packages installed', '', 'bla'] 



r12 = takewhile(lambda x: "packages installed" not in x, l12) 
ri1 = takewhile(lambda x: "packages installed" not in x, li1) 
print(list(r12)) 
# ['pin 2.3', 'vlo 5.4'] 

print(list(ri1)) 
# ['pin 2.3', 'vlo 5.4', 'lu 1.3'] 
+0

工作得非常好,非常感謝! – diegus

+2

這個問題可能會矯枉過正。 –

+2

@MoonCheesez我也這麼認爲。但是,一旦條件失敗,與列表理解相反,這將停止。 –

1

簡單的東西:

li1 = ['pin 2.3','vlo 5.4', 'lu 1.3', '3 packages installed', '', 'bla'] 

out1 = [] 
for x in li1: 
    if "packages installed" in x: 
     break 
    out1.append(x) 

print(out1) 
# ['pin 2.3', 'vlo 5.4', 'lu 1.3'] 

編輯:好像我是一個晚一點。

-1

itertools.takewhile如果你想要一個新的列表,效果很好。要修改原來的列表就地你可以這樣做:

>>> L = ['pin 2.3','vlo 5.4', '2 packages installed', 'bla-bla'] 
>>> for i, v in enumerate(L): 
...  if "packages installed" in v: 
...   del L[i:] 
...   break 
... 
>>> L 
['pin 2.3', 'vlo 5.4']