假设我有一份清单
a=[1,2,3]
我想知道其中至少有一个数字是否存在于另一个列表中,如下所示:
b=[4,5,6,7,8,1]
换句话说,我想知道列表b
中是否存在1,2或3。
我现在可以做一些像
def func(a, b):
for i in a:
if i in b:
return True
return False
但有可能有办法将其放在一行中以使事情变得整洁吗?
答案 0 :(得分:60)
Python 2.6及以上版本:
def func(a, b):
return not set(a).isdisjoint(b)
对于2.4或2.5:
def func(a, b):
return len(set(a).intersection(b)) != 0
2.3及以下:
sudo apt-get update
sudo apt-get upgrade
)
答案 1 :(得分:49)
有很多方法可以做到这一点。最直接的翻译是:
any_in = lambda a, b: any(i in b for i in a)
您还可以使用涉及集合的各种内容,例如:
any_in = lambda a, b: bool(set(a).intersection(b))
(这取决于a
可以播放的元素,但是如果这是真的,那么从a
和b
制作一组更大的元素可能会更快这些方法中的任何一种。)
编辑:对于Python 2.6及更高版本,isdisjoint
优于intersection
,如下面的各个人所述。很高兴了解这一点。 :)
答案 2 :(得分:42)
any(i in b for i in a)
答案 3 :(得分:13)
这是 set 问题,而不是列表问题。使用正确的数据类型,答案通常很明显: - )
def func(a, b):
return not set(a).isdisjoint(b)
答案 4 :(得分:5)
通过将列表转换为集合,您可以对它们执行集合操作。如果交集大于0,则至少有一个元素匹配:
len(set(a) & set(b)) > 0
答案 5 :(得分:4)
这应该有效。
def func(a, b):
return any([i in b for i in a])