一行检查另一个列表中是否存在列表中至少有一个项目?

时间:2012-05-19 19:35:07

标签: python

假设我有一份清单 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

但有可能有办法将其放在一行中以使事情变得整洁吗?

6 个答案:

答案 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可以播放的元素,但是如果这是真的,那么从ab制作一组更大的元素可能会更快这些方法中的任何一种。)

编辑:对于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])