2015-09-11 19 views
0

假設我有兩個等長列表,list1list2,都包含一堆數字。我想刪除所有不符合特定標準的list1元素。夠簡單。我怎樣才能從list2中刪除相應的元素?如果我刪除,例如list1的第5個元素,我還想刪除list2的第5個元素。什麼我想下面做例子:在兩個列表上的列表理解

list1 = [i for i in list1 if i >= 1] 
list2 = list2 #but with the corresponding values of list1 removed from list2 as well 

我能想出,說,

list2_temp = [] 
for j in range(len(list1)): 
    if list1[j] >= 1: 
     list2_temp.extend(list2[j]) 

list1 = [i for i in list1 if i >= 1] 

,但我正在尋找一個更「Python化」的方式來做到這一點,特別是如果有什麼方法可以使用list2以及list1的列表解析。任何想法/建議?

回答

4

結合,過濾,分離:

list1[:], list2[:] = zip(*((x, y) for (x, y) in zip(list1, list2) if predicate(x))) 
+0

如果對於謂詞中的每個'x's都是'False' .....'ValueError:需要超過0個值才能解包'......我該如何解決這個問題? –

+0

推遲分配,直到您可以檢查是否有任何結果,然後使用'del list1 [:],list2 [:]'如果沒有任何結果。 –

1

我想,也許問題是,你有2名平行的列表,而不是持有具有對每一個單元的所有數據項的單一列表。

將數據視爲電子表格 - 目前,您有2列,並且想要按一列中的值過濾行。而不是將數據建模爲一堆列,最好將其建模爲行列表。

要解決該問題現在你可以壓縮的名單一起,它們進行過濾,然後在年底解壓:

items = [(i, j) for i, j in zip(list1, list2) if i >= 1] 
tuple1, tuple2 = zip(*items) 

,但我還是建議考慮存儲以不同的方式將數據..