2015-10-20 122 views
1

這可能已經回答了,但請相信我我可能很愚蠢(我現在有嚴重的疑問)我什至都看不到解決方案。爲了使我的問題很簡單,比方說我有兩個列表如下: LIST_1列表在另一個列表中的搜索元素

[2, 3, 4] 

list_2

[['2', '54', '65', '22'],['2', '67', '66', '32'], ['10', '11', '43', '90'], ['3', '28', '81', '78'], ['4', '87', '19', '13'], ['4', '30', '51', '92'], ['4', '11', '44', '55'], ['13', '22', '69', '99']] 

我試圖做的是找到,如果有任何任何比賽list_1的單個元素與list_2的任何第一個元素,如果是,則返回稍後將寫出的行(但我應該可以執行此操作)。 實際上,在這種情況下,結果我後:

2 54 65 22 
2 67 66 32 
3 28 81 78 
4 87 19 13 
4 30 51 92 
4 11 44 55 

我結束了這麼多了,如果循環和列表理解,我失去了我的賬,我承認我沒有太多熟悉Python規則。希望我能從這裏得到任何幫助。

回答

1

使用列表理解,只是檢查b中各表的是第一個元素存在於:

a = [2, 3, 4] 
b = [['2', '54', '65', '22'],['2', '67', '66', '32'], ['10', '11', '43', '90'], ['3', '28', '81', '78'], ['4', '87', '19', '13'], ['4', '30', '51', '92'], ['4', '11', '44', '55'], ['13', '22', '69', '99']] 

c = [x for x in b if int(x[0]) in a] 
+0

這似乎工作,仍然測試我的真實數據集。儘管如此,快速的問題是,搜索b中的每個元素而不是相反的方法會更節省時間嗎?或者,也許這是我正在犯的錯誤.... – eikonal

0

你可以只filterlist2

result = filter(lambda vector: int(vector[0]) in list1, list2) 

請注意,您必須轉換字符串包含在list2(注意'!)的列表中,首先是整數,這就是int()在這裏所做的。

+0

你真的不需要lambda在這裏。 –

相關問題