如何从两个列表中找到匹配项?

24

可能是重复问题:
Python:如何找到列表交集?

我有两个数据列表在一个.txt文件中。

data1 = "name1", "name2", "name3", "name4" etc.

data2 = "name3", "name6", "name10" etc.

我想找出两个列表中都出现过的名字,应该怎么做?

4个回答

62

使用集合

set(data1) & set(data2)

& 运算符表示“给我这两个集合的交集”; 或者你可以使用 .intersection 方法:

set(data1).intersection(data2)

2
我个人认为使用 .intersection 更易读,但正如你所说它们做相同的事情。 - TimothyAWiseman
1
如果这个回答解决了你的问题,你应该点击答案旁边的复选框 接受这个答案,这将奖励双方一些积分,并标记这个问题已解决。 - Levon
1
@PeterGraham:在这种情况下,您将使用Counter()对象,它们是多重集合。 - Martijn Pieters
1
@Maikefer:集合不保留顺序。在这种情况下,只为data2创建一个集合,并使用列表推导式来测试值是否与该集合匹配:data2_set = set(data2)[v for v in data1 if v in data2] - Martijn Pieters
1
@Maikefer:你仍然想要创建一个集合,因为这样包含测试会更快。我没有考虑data1中的重复项,你需要使用members = set(data1).intersection(data2)[v for v in data1 if v in members]来删除那种情况下的重复项。 - Martijn Pieters
显示剩余3条评论

14
nf = [x for x in data1 if x in data2]
nf

返回两个列表中共同的项。


1
>>> [ name for name in data1 if name in data2 ]
['name3']

-3
For a in data1:
    for b in data2:
        if a==b:
        print(a)

这是一种方法,但不是最好的方法


1
"For" 中有拼写错误并且缺少缩进。 - easelpeasel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接