【问题标题】:Comparing a list against another val list Python 3将列表与另一个 val 列表 Python 3 进行比较
【发布时间】:2016-11-18 14:26:30
【问题描述】:

我正在尝试编写一个函数,该函数将字符串匹配并在 python 3 中的两个字符串之间进行精确比较,基本上第二个列表是验证,所以如果 list1 中的任何项目不在 list2 中,我想抛出一个错误。如果它有任何区别 list1 来自 CSV 文件,我设法将行放到正确的位置。

我还很新,有点迷茫。 例如:

list1 = ["a", "B", "AB"]
list2 = ["a","B","abc"]

所以 list1 中的“AB”应该关闭程序,直到有人修复了 CSV 文件,因为“AB”不在 list2 中

list1 = ["a", "b"]
list2 = ["b", "a"]

这应该会通过,因为它们都在两个列表中

list1 可能有多次相同的字符串,我尝试了所有我能想到的。 任何帮助表示赞赏:)

【问题讨论】:

  • 它们是否需要具有相同的尺寸,或者一个比另一个大?
  • elethans 下面的答案对我使用集合有用,我希望能够像我的 CSV 文件一样增加错误检查,但如果有奇怪的东西进入它,那么它会抛出错误

标签: python-3.x


【解决方案1】:

与 JavaScript 不同,您可以在 Python 中将列表与 == 进行比较,即使它们不是同一个对象,也可能会返回 True

In [1]: list1 = ["a", "B", "AB"]

In [2]: list2 = ["a","B","abc"]

In [3]: list1 == list2
Out[3]: False

In [4]: list3 = ["a", "B", "AB"]

In [5]: list1 == list3
Out[5]: True

如果列表可能相同,但顺序可能不同,您可以比较排序列表。

In [6]: list4 == list1
Out[6]: False

In [7]: sorted(list4) == sorted(list1)
Out[7]: True

所以你可以这样做:

def same_list(l1, l2):
    return sorted(l1) == sorted(l2)

如果您真的想在列表不相等时引发错误,您可以在 same_list() 函数内使用 raise MyError,或者在该函数返回 False 时使用它。

list1 可能有多次相同的字符串

如果你想要这样的情况:

list1 = ["a", "b", "a", "b", "b"]
list2 = ["b", "a"]

报错,你可以使用set()

set(list1) == set(list2)    # This will evaluate to True for the lists above

这将比较两个列表的唯一元素,忽略重复项(另请注意,集合不需要排序)。

【讨论】:

  • 嘿,我实际上找到了一种不同的方法来解决我自己的问题(至少供我使用)我制作了一个密钥列表,现在当从 CSV 文件中输入信息时,程序使用 for循环检查它是否在列表中,如果它不在密钥列表中则抛出错误...但是感谢您的帮助
猜你喜欢
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
相关资源
最近更新 更多