我正在尝试为我的Django应用程序编写测试,我需要多次检查 如果2个列表具有相同的对象(即A中的每个对象也在B中,反之亦然)。
我读了assertLists / Sequence / Equal等但是我看到了列表
具有相同的对象,但顺序不同(A = [a,b,c], B = [b,c,a])
然后它返回一个错误,我不希望它是一个错误,因为它们都有相同的对象。
有没有办法在不循环列表的情况下检查这个?
答案 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