如何比较两个列表,使得第二个列表的值与第一个一致且顺序无关?
a = [1, 2, 3, 4]
b = [2, 4, 3, 1]
c = [2, 3]
当我们比较和时,应该返回True
:因为中的所有项目都在中出现,而中的所有项目也都在中出现。
当我们比较和False
:因为中有一些项目在
那么,什么是最符合Python风格的做法呢?
3 个回答
3
把它们变成集合:
>>> set([1,2,3,4]) == set([2,4,3,1])
True
>>> set([2, 3]) == set([1,2,3,4])
False
如果你的列表里有重复的项目,你还需要比较它们的长度。集合会自动去掉重复的部分。
7
使用集合或不可变集合。
set_a = {1, 2, 3, 4} #python 2.7 or higher set literal, use the set(iter) syntax for older versions
set_b = {2, 4, 4, 1}
set_a == set_b
set_a - set_b == set_b - set_a
使用集合相比于任何列表方法的最大优点是,它的可读性很高,你没有改变原来的可迭代对象。而且即使在a很大而b很小的情况下,它的性能也很好(不过,如果你经常遇到这种情况,先检查一下a和b的长度是否相同是个不错的优化方法),使用合适的数据结构来完成任务是符合Python编程风格的。
19
先排序,然后进行比较。
sorted(a) == sorted(b)