我正在尝试比较两个列表,如果第一个列表中的任何值在第二个列表中,则只需打印一条消息.
def listCompare():
list1 = [1, 2, 3, 4, 5]
list2 = [5, 6, 7, 8, 9]
if list1 in list2:
print("Number was found")
else:
print("Number not in list")
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我想要if评估,True因为5在两个列表中.这不起作用,我不确定比较两个列表的最简单方法.
Dav*_*ber 67
你可以解决这么多问题.一个很容易理解的就是使用一个循环.
def comp(list1, list2):
for val in list1:
if val in list2:
return True
return False
Run Code Online (Sandbox Code Playgroud)
reduce(lambda v1,v2: v1 or v2, map(lambda v: v in list2, list1))
Run Code Online (Sandbox Code Playgroud)
更好的是,reduce可以替换为any:
any(map(lambda v: v in list2, list1))
Run Code Online (Sandbox Code Playgroud)
你也可以使用集合:
len(set(list1).intersection(list2)) > 0
Run Code Online (Sandbox Code Playgroud)
vid*_*dit 14
有不同的方式.如果您只想检查一个列表是否包含其他列表中的任何元素,您可以执行此操作.
not set(list1).isdisjoint(list2)
Run Code Online (Sandbox Code Playgroud)
我相信使用isdisjoint比intersectionPython 2.6及更高版本更好.
小智 9
有一个内置函数来比较列表:
以下是cmp()方法的语法 -
cmp(list1, list2)
#!/usr/bin/python
list1, list2 = [123, 'xyz'], [123, 'xyz']
print cmp(list1,list2)
Run Code Online (Sandbox Code Playgroud)
当我们运行上面的程序时,它产生以下结果 -
0
Run Code Online (Sandbox Code Playgroud)
如果结果是平局,则表示返回0
您的原始方法可以使用列表理解:
def listCompare():
list1 = [1, 2, 3, 4, 5]
list2 = [5, 6, 7, 8, 9]
if [item for item in list1 if item in list2]:
print("Number was found")
else:
print("Number not in list")
Run Code Online (Sandbox Code Playgroud)
您可以将列表更改为集,然后使用&函数比较两个集.例如:
list1 = [1, 2, 3, 4, 5]
list2 = [5, 6, 7, 8, 9]
if set(list1) & set(list2):
print "Number was found"
else:
print "Number not in list"
Run Code Online (Sandbox Code Playgroud)
"&"运算符给出了两组之间的交叉点.如果存在交叉点,则将返回具有交叉点的集合.如果没有相交点,则返回空集.
当您使用Python中的"if"运算符计算空set/list/dict/tuple时,将返回布尔值False.