【问题标题】:How do I compare 2D lists for equality in Python?如何在 Python 中比较 2D 列表是否相等?
【发布时间】:2013-03-29 03:49:07
【问题描述】:

给定两个列表:

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

我将如何写compare 这样:

compare(a,b) => true

【问题讨论】:

  • .. a == b 不能达到你的目的吗?
  • 不一定。例如,如果列表的元素是字符串(并且您希望不区分大小写)或浮点数并且您希望容忍数字错误,那么== 将不起作用。取决于您的预期类型。
  • @sdasdadas 在提问之前尝试一些事情 :) 列表是 Python 对象; == 测试 Python 对象的相等性。如果测试两个普通列表的相等性也是一样的。
  • ...也许我是少数,但我很高兴当我自己遇到一个愚蠢的问题时,总有一个完全愚蠢的问题。
  • @yzn-pku 这很好,因为我多年来一直在生成它们。

标签: python arrays list


【解决方案1】:

你想要这个吗:

>>> a = [[1,2],[3,4]]
>>> b = [[1,2],[3,4]]
>>> a == b
True

注意:== 在 List 无序时无用,例如(注意ab 中的顺序

>>> a = [[3,4],[1,2]]
>>> b = [[1,2],[3,4]]
>>> a == b
False

请参阅此问题以获取更多参考:How to compare a list of lists/sets in python?

编辑:感谢@dr jimbob

如果要在排序后进行比较,可以使用sorted(a)==sorted(b)
但是再强调一点,如果 c = [[4,3], [2,1]] 然后是 sorted(c) == sorted(a) == False,因为 sorted(c) 不同 [[2,1],[4,3]]不是深度排序

为此,您必须使用链接答案中的技术。因为我也在学习 Python :)

【讨论】:

  • 最后一部分不对。 a.sort()a 进行排序,然后返回 None。所以a.sort() == None 将是True,而您的a.sort()==b.sort() 计算结果为None == None。尝试获取False;例如,让b=[]。 (请注意在检查无时使用is 比较的更好方式)。现在,sorted(a) == sorted(b) 可以工作了。请注意,如果您有 a = [[1,2],[3,4]]b = [[3,4],[1,2]]c = [[4,3], [2,1]],那么只有 sorted(a)sorted(b) 将相等(均为 [[1,2],[3,4]]),sorted(c) 不同([[2,1],[4,3]])。
【解决方案2】:

简单:

def compare(a, b): return a == b

另一种方法是使用lambda 创建匿名函数:

compare = lambda a, b: a == b

【讨论】:

    猜你喜欢
    • 2012-05-11
    • 2013-10-09
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    相关资源
    最近更新 更多