【问题标题】:How to check if contents of two lists is same in python?如何在python中检查两个列表的内容是否相同?
【发布时间】:2017-01-01 10:07:18
【问题描述】:

我有 3 个列表:

  1. list_1 = [1,2]
  2. list_2 = [2,1]
  3. list_3 = [1,2,3]

注意:[] 中的数字是来自 Django 模型的 ids

我想测试两个列表的内容(但不一定是顺序)是否完全相同。参考上面3个例子:

比较 list_1list_2
应该返回 True,

但如果我在 list_2list_3 之间或 list_1list_3 之间进行验证,
那么结果应该是False

我如何做到这一点?

谢谢:D

【问题讨论】:

  • 我不明白这个问题。如果要测试list_1 中的数字是否在list_2 中,为什么要在list_2list_3 之间进行验证?为什么这会导致它返回False
  • 将列表转换为set,然后使用set.issubset() 判断一个列表是否包含另一个列表。
  • 使用集合比较慢。请参阅底部的链接。另外,我认为 OP 不想比较琐碎的子集,而是比较相等性,从而使您的答案可能不正确。哦,stackoverflow.com/q/7828867/5775722 的可能重复项
  • 感谢@Barmar 的回复,我想检查一个列表中的数字是否与另一个列表中的数字相等,那么它们中的值必须相同
  • 现在我明白了。你想要的是validate(list_1, list_2) 是真的,但validate(list_2, list_3) 是假的。

标签: python django list


【解决方案1】:

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

def validation(list_1,list_2):
    return sorted(list_1) == sorted(list_2)

这会通过您的所有测试用例。我可能误解了你的问题,如果是这样,请澄清一下。

【讨论】:

  • 其实在时间复杂度上使用Counter(list_1) == Counter(list_2)会更好。
猜你喜欢
  • 2020-07-16
  • 2013-05-17
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 2012-03-29
  • 2014-11-05
相关资源
最近更新 更多