我如何比较python中的两个列表,并返回第二个需要具有相同值而不管顺序?

时间:2011-09-24 14:18:39

标签: python list comparison

a = [1, 2, 3, 4]
b = [2, 4, 3, 1]
c = [2, 3]

将a与b进行比较时,应返回Truea中的所有项目都显示在b中,b中的所有项目都显示在a中}。

将[{1}}与a进行比较时,应该返回cFalse中的a项中不存在{/ 1}}。

pythonic 的方法是什么?

4 个答案:

答案 0 :(得分:14)

排序,然后比较。

sorted(a) == sorted(b)

答案 1 :(得分:7)

使用sets或frozensets。

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是否有如果您经常考虑这种情况,那么相同的长度首先是一个很好的优化,并且使用正确的数据结构是pythonic。

答案 2 :(得分:2)

使用set s:

In [4]: set(a) == set(b)
Out[4]: True

In [5]: set(a) == set(c)
Out[5]: False

答案 3 :(得分:2)

将它们变成集合:

>>> set([1,2,3,4]) == set([2,4,3,1])
True

>>> set([2, 3]) == set([1,2,3,4])
False

如果您的列表包含重复项,则您还必须比较它们的长度。设置折叠副本。