unittest - 不考虑顺序比较列表

Tom*_*thi 6 python unit-testing

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

self.assertEqual(sale, [['1',14], ['2',5], ['3',7], ['4',1]])
Run Code Online (Sandbox Code Playgroud)

但它给出了以下错误:

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]]
Run Code Online (Sandbox Code Playgroud)

我怎样才能让这个场景通过,防止 assertEqual 函数来避免检查列表中元素的顺序。

小智 7

由于 Python 列表会跟踪顺序,因此您需要某种方法来确保项目的顺序相同。

如果所有项目都是唯一的,则一组可能会起作用。如果它们不是唯一的,您将丢失有关重复项的信息。

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

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


Tim*_*all 6

你要assertCountEqual

对于assertCountEqual(a, b),如果满足以下条件,则通过:

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