在Python 2.x中交叉引用两个列表
我刚开始学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)
如果你需要的结果是一个列表,但如果你可以接受把它保持为一个集合,那就直接这样做: