如何在Python中检查两个列表的内容是否相同?

4
我有三个列表:
  1. list_1 = [1,2]
  2. list_2 = [2,1]
  3. list_3 = [1,2,3]

注意:方括号内的数字是Django模型中的ID。

我想测试两个列表的内容是否完全相同(但不一定顺序相同)。参考上面的3个例子:
比较 list_1 list_2 应该返回 True
但如果我在 list_2 list_3 之间或在 list_1 list_3 之间进行验证, 那么结果应该是 False
如何实现这一点?
谢谢:D

2
我不明白这个问题。如果你想测试list_1中的数字是否在list_2中,为什么要在list_2list_3之间进行验证?而且为什么会导致返回False - Barmar
将列表转换为 set,然后使用 set.issubset() 来判断一个列表是否包含另一个列表。 - Barmar
使用集合会更慢。请参见底部的链接。此外,我认为 OP 不想比较微不足道的子集,而是相等,这可能使您的答案不正确。哦,还有可能是 https://dev59.com/Umsz5IYBdhLWcg3wiYY0 的重复。 - FMaz
谢谢您的回复@Barmar,我想检查一个列表中的数字是否与另一个列表相等,然后它们内部的值必须相同。 - Luthfi
现在我明白了,你想要的是 validate(list_1, list_2) 为 true,但 validate(list_2, list_3) 为 false。 - Barmar
1个回答

4
我理解您的问题是,如果列表的内容相同(但不一定顺序相同),则返回true,否则返回false。这可以通过对两个列表进行排序,然后使用==进行比较来解决。sorted()按升序返回整数列表。这意味着,如果列表的内容相同,sorted()将返回相同的列表。
def validation(list_1,list_2):
    return sorted(list_1) == sorted(list_2)

这个程序通过了所有测试用例。如果我误解了您的问题,请明确说明。

1
实际上,使用 Counter(list_1) == Counter(list_2) 在时间复杂度方面会更好。 - FMaz
我收到了 TypeError: '<'不支持'QuerySet'实例和'QuerySet'实例之间的比较 的错误。 - AnonymousUser

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