列表在另一个列表中的搜索元素

问题描述:

这可能已经回答了,但请相信我我可能很愚蠢(我现在有严重的疑问)我什至都看不到解决方案。为了使我的问题很简单,比方说我有两个列表如下: 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规则。希望我能从这里得到任何帮助。

使用列表理解,只是检查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

你可以只filterlist2

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

请注意,您必须转换字符串包含在list2(注意'!)的列表中,首先是整数,这就是int()在这里所做的。

+0

你真的不需要lambda在这里。 –