测试两个列表是否相等

时间:2015-05-21 08:28:37

标签: python django unit-testing

我正在尝试为我的Django应用程序编写测试,我需要多次检查 如果2个列表具有相同的对象(即A中的每个对象也在B中,反之亦然)。

我读了assertLists / Sequence / Equal等但是我看到了列表 具有相同的对象,但顺序不同(A = [a,b,c], B = [b,c,a])然后它返回一个错误,我不希望它是一个错误,因为它们都有相同的对象。

有没有办法在不循环列表的情况下检查这个?

2 个答案:

答案 0 :(得分:10)

您可以在Python 3中使用assertCountEqual,或在Python 2中使用assertItemsEqual

来自assertCountEqual的Python 3文档:

  

测试该序列首先包含与第二个相同的元素,而不管它们的顺序如何。如果没有,将生成列出序列之间差异的错误消息。

     

比较第一个和第二个时,不会忽略重复元素。它验证每个元素在两个序列中是否具有相同的计数。相当于:assertEqual(Counter(list(first)), Counter(list(second)))但也适用于不可用对象的序列。

答案 1 :(得分:2)

如果您使用list()数据类型,那么如果列表不是太大,最简洁的方法是:

sorted(list_1) == sorted(list_2)

看看这个问题(相同): Check if two unordered lists are equal