Python检查对象是否在对象列表中

22 投票
7 回答
80954 浏览
提问于 2025-04-15 21:07

我在Python里有一个对象列表。然后我又有另一个对象列表。我想遍历第一个列表,看看有没有任何项目出现在第二个列表里。

我本以为可以简单地这样做:

for item1 in list1:
    for item2 in list2:
        if item1 == item2:
            print "item %s in both lists"

但是这似乎不太管用。不过如果我这样做:

if item1.title == item2.title:

就可以正常工作。不过我还有更多的属性,所以如果不必要的话,我不想写一个很大的if语句来比较所有的属性。

有没有人能帮我或者给我建议,怎么找到两个列表中都出现的对象呢?

谢谢!

7 个回答

5

可以使用集合的交集来实现这个功能。

>>> x=[1,2,3,4]
>>> y=[3,4,5,6]
>>> for i in set(x) & set(y):
...     print "item %d in both lists" %i
...
item 3 in both lists
item 4 in both lists
10

如果两个对象不是同一个实例,你需要实现 __eq__ 方法,这样 Python 才能判断这两个对象是否真的相等。

当然,大多数库里的类型,比如字符串和列表,已经实现了 __eq__ 方法,这可能就是你比较标题时能成功的原因(它们是字符串吗?)。

想了解更多信息,可以查看 Python 文档
这里有一个 随机示例,讲的是 __eq__ 的用法。

42

假设你的对象只有一个和相等性相关的属性,那就是 title,你需要这样来实现 __eq__ 方法:

class YourObject:
    [...]
    def __eq__(self, other):
        return self.title == other.title

当然,如果你还有其他和相等性相关的属性,也要把它们包含进去。你还可以考虑实现 __ne____cmp__ 方法,以保持行为的一致性。

撰写回答