单元测试 - 无论顺序如何比较列表

9

我正在对两个列表的列表值进行单元测试:

self.assertEqual(sale, [['1',14], ['2',5], ['3',7], ['4',1]])

但是它会出现以下错误:
AssertionError: Lists differ: [['1', 14], ['4', 1], ['2', 5], ['3', 7]] != [['1'
, 14], ['2', 5], ['3', 7], ['4', 1]]

First differing element 1:
['4', 1]
['2', 5]

- [['1', 14], ['4', 1], ['2', 5], ['3', 7]]
+ [['1', 14], ['2', 5], ['3', 7], ['4', 1]]

我该如何使这种情况通过,防止assertEqual函数检查列表中元素的顺序。

2
你可以对它们进行排序,比较它们的长度并将它们作为集合进行比较等。 - user3483203
@chrisz。选项2不好:1, 1, 21, 2, 2不同。 - Mad Physicist
2个回答

6

由于Python列表保持顺序,您需要一些方法来确保项目按相同顺序排列。

如果所有项目都是唯一的,则可以使用集合。如果它们不是唯一的,您将失去有关重复项的信息。

在比较它们之前对列表进行排序可能是最好的选择。它将保留所有数据并在每个列表中按相同顺序排列。

这里是Python 3中不同内置排序方法的链接。 https://docs.python.org/3/howto/sorting.html


嗯,我认为我已经回答了你问题的第一部分:“如何使得这种情况通过”,但是没有回答第二部分:“如何避免assertEqual函数检查列表中元素的顺序”。 - AndrewHK
我认为你的回答完全没问题。我不知道为什么会有人给你点踩。第二部分实际上没有意义。如果你不想修改原始数据,只需使用 sorted 而不是原地排序即可。 - Mad Physicist

5
你需要使用assertCountEqual
对于assertCountEqual(a, b),如果满足以下条件,则通过:

a和b具有相同数量的相同元素,无论它们的顺序如何。


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