我正在尝试编写一个函数,它将字符串匹配并在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可能多次使用相同的字符串,我已经尝试了所有我能想到的。 任何帮助表示赞赏:)
答案 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
这将比较两个列表的唯一元素,忽略重复(同时请注意,集合不需要排序)。