Python检查对象是否在对象列表中
我在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
42
假设你的对象只有一个和相等性相关的属性,那就是 title
,你需要这样来实现 __eq__
方法:
class YourObject:
[...]
def __eq__(self, other):
return self.title == other.title
当然,如果你还有其他和相等性相关的属性,也要把它们包含进去。你还可以考虑实现 __ne__
和 __cmp__
方法,以保持行为的一致性。