在Python 2.x中交叉引用两个列表

0 投票
3 回答
2171 浏览
提问于 2025-04-16 12:15

我刚开始学Python(用的是2.6和2.7版本),我在docs.Python.org和这个网站上查过资料。我找到一个类似的问题:在Python中比较列表

...但是我想要对比两个大小不同、顺序也不确定的列表。下面是我想做的一个例子:

>>> mammals = ["gorilla","cat","rat","chimpanzee","dog","beaver"]
>>> apes =  ["orangutan","chimpanzee","human","gorilla"]

# magic happens here

>>> print result # order doesn't matter
['chimpanzee', 'gorilla']

希望能得到一个共同元素的结果。了解Python的人应该知道,这种简单的问题应该有一个简单又优雅的解决办法。

3 个回答

0

这对于内置的 set 类型来说非常合适。

首先把基础列表变成一个集合:

mammals = set(["gorilla","cat","rat","chimpanzee","dog","beaver"])

然后使用交集函数(被比较的列表不一定要是集合)

>>> mammals.intersection(["orangutan","chimpanzee","human","gorilla"])
set(['gorilla', 'chimpanzee'])
1

使用集合:

mammals = ["gorilla","cat","rat","chimpanzee","dog","beaver"]
apes =  ["orangutan","chimpanzee","human","gorilla"]
print set(mammals).intersection(apes)

打印输出

set(['gorilla', 'chimpanzee'])
1
list(set(mammals) & set(apes))
set(mammals) & set(apes)

如果你需要的结果是一个列表,但如果你可以接受把它保持为一个集合,那就直接这样做:

撰写回答