比较列表与另一个val列表Python 3

时间:2016-11-18 14:26:31

标签: python-3.x

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

我很新,有点迷失。 EG:

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

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

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

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

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

1 个答案:

答案 0 :(得分: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)

如果你确实想要在列表不相等的情况下引发错误,你可以在raise MyError函数中使用same_list(),或者如果该函数返回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

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