Python 对照另一个列表检查列表,并根据特定匹配项输出

Python 对照另一个列表检查列表,并根据特定匹配项输出,python,python-3.x,list-comprehension,Python,Python 3.x,List Comprehension,我有两张名单 List1 = [['X', '1', 'P'], ['D', '2', 'Y']] List2 = [['X', '1', 'Y'], ['Y', '2', 'H'], ['T', '6', 'E']] 注意:列表2总是包含比列表1更多的项 我想对照列表2检查列表1,并返回列表元素[0]和[1]都相同的所有列表1值 因此,我的最终结果应该是: List3 = [['X', '1', 'P']] 或者,在列表中: list3 = [l1 for l1 in list1 fo

我有两张名单

List1 = [['X', '1', 'P'], ['D', '2', 'Y']]

List2 = [['X', '1', 'Y'], ['Y', '2', 'H'], ['T', '6', 'E']]
注意:列表2总是包含比列表1更多的项

我想对照列表2检查列表1,并返回列表元素[0]和[1]都相同的所有列表1值

因此,我的最终结果应该是:

List3 = [['X', '1', 'P']] 
或者,在列表中:

list3 = [l1 for l1 in list1 for l2 in list2 if l1[0] == l2[0] and l1[1] == l2[1]]

很简单,迭代两个列表,检查元素0和1。

使用以下代码:

list1=[['X','1','P'],['D','2','Y']
列表2=['X','1','Y'],['Y','2','H'],['T','6','E']]
如果list2[i][:-1]==list1[i][:-1],则类似的_元素=[list1[i]表示范围内的i(len(list1))]

一种有效的方法是使用感兴趣的值的元组创建一个查找集。然后,您可以制作一个简单的列表进行筛选:

List1 = [['X', '1', 'P'], ['D', '2', 'Y']]
List2 = [['X', '1', 'Y'], ['Y', '2', 'H'], ['T', '6', 'E']]

lookup = set(tuple(l[:2]) for l in List2)

[l for l in List1 if tuple(l[:2]) in lookup]
# [['X', '1', 'P']]

这里的其他答案假设匹配列表的顺序相同。以下是一个解决方案,它不会:

list1 = [['X', '1', 'P'], ['D', '2', 'Y']]
list2 = [['X', '1', 'Y'], ['Y', '2', 'H'], ['T', '6', 'E']]

list3 = [i for i in list1 if tuple(i[:2]) in [tuple(i[:2]) for i in list2]]
print(list3)
输出:

[['X', '1', 'P']]
[['X', '1', 'P']]
为了提高上述操作的效率,可以将列表缓存在列表的条件中的变量中

list1 = [['X', '1', 'P'], ['D', '2', 'Y']]
list2 = [['X', '1', 'Y'], ['Y', '2', 'H'], ['T', '6', 'E']]

list2_tuples = set(tuple(i[:2]) for i in list2)
list3 = [i for i in list1 if tuple(i[:2]) in list2_tuples]
print(list3)
输出:

[['X', '1', 'P']]
[['X', '1', 'P']]
这将有助于:

[e1表示列表2中的e2表示列表1中的e1,如果e1[:2]==e2[:2]]

到目前为止您尝试了什么?您的第二个示例仍然依赖于相同的顺序。为什么?如果
list2
的顺序相反,
('X','1')
仍将在
list2\u元组中
可能我误解了-我认为你的意思是
['1','X','Y']
将被视为与
['X','1','P']
匹配是的,不是我的意思,也不是OP要求的。我的意思是,如果
List2=[['Y','2','H'],['t','6','E'],['X','1','Y']].
使用相同索引的元素匹配两个列表,那么其他解决方案将不起作用