如何在Python中比较两个二维列表的相等性?

10

考虑两个列表:

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

我该如何编写 compare 函数以满足以下条件:

compare(a,b) => true

5
“a == b” 不就能达到你的目的吗? - DSM
2
不一定。例如,如果列表的元素是字符串(并且您想要不区分大小写),或者是浮点数并且您想要容忍数字误差,则“==”将无法工作。这取决于您期望的类型。 - DSM
@sdasdadas 在提问之前先尝试一下几件事情 :) 列表是 Python 对象;== 用于测试 Python 对象的相等性。对于两个普通列表的相等性测试也是一样的。 - Rushy Panchal
也许我是少数派,但当我遇到一个愚蠢的问题时,我很高兴在SO上总能找到一个确切的愚蠢问题。 - yzn-pku
@yzn-pku 这很好,因为我已经生成它们多年了。 - sdasdadas
2个回答

14

你需要这个吗:

>>> a = [[1,2],[3,4]]
>>> b = [[1,2],[3,4]]
>>> a == b
True
注意:== 在列表无序的情况下无用,例如(注意ab中的顺序不同)。

注:当列表无序时, == 不起作用,例如 (请注意 a b 中的顺序)。

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

参考这个问题以获取更多信息:如何在Python中比较一个列表的列表/集合?

编辑:感谢 @dr jimbob

如果你想在排序后进行比较,可以使用sorted(a)==sorted(b)
但是需要注意的是,如果 c = [[4,3], [2,1]],那么sorted(c) == sorted(a) == False,因为sorted(c)会得到不同的结果[[2,1],[4,3]](未进行深度排序)

要实现此功能,您需要使用链接答案中提到的技术。由于我也在学习Python :)


1
最后一部分不正确。a.sort()会就地对a进行排序,然后返回None。因此,a.sort() == None将为True,而您的a.sort()==b.sort()评估为None == None。尝试获得一个False;例如,让b=[]。(注意,使用“is”比较来检查None是更好的风格)。现在,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]])。 - dr jimbob

3

简单:

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

另一种方法是使用lambda创建匿名函数:
compare = lambda a, b: a == b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接