检查Python中一个列表中的项是否存在于另一个列表中

4

有两个列表

a= [1,2,3]
b = [1,2,3]

现在我想要在Python中使用一行代码来检查a中的元素是否存在于b中。
我可以在a上使用循环,然后检查它是否存在于b中。但是我想要一些Pythonic的方式(一行代码)。

一行代码并不总是意味着它是 Pythonic 的。 - Alexander Zhukov
any(a) in b是什么意思? - vahid abdi
同意。但我知道我可以在Python中将其转换为一行代码,而不是使用循环。 - Praful Bagai
@Vahidabdi - 我尝试了 `a= [1,2,3] b = [5,5,3]print any(a) in b`。它给了我 false。 - Praful Bagai
是的,any(a) 返回 True(1)或 False(0),而这个值不在 b 中。 - vahid abdi
3个回答

7

bool(set(a)&set(b))ab 转换为集合,然后在它们上应用 交集运算符 (&)。然后在结果集上应用 bool,如果集合为空(没有共同元素),则返回 False,否则返回 True(集合不为空且有共同元素)。

不使用集合: any(True for x in a if x in b)any() 如果任一元素为真,则返回 True,否则返回 False。


它是做什么的?请解释。 - Praful Bagai
@user1162512 我已经更新了它;我在添加信息时看到了你的评论。 - Ramchandra Apte
@user1162512 只需删除 bool(),就会返回共同元素的集合;您可以使用 len(the_set) 了解元素数量。 - Ramchandra Apte
我为什么需要使用 set?有什么特殊原因吗?我的意思是,我也可以使用 a and b - Praful Bagai
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/42023/discussion-between-ramchandra-apte-and-user1162512 - Ramchandra Apte
显示剩余3条评论

3

我认为你应该使用集合。以下是如何实现:

def check_element(a, b):
  return not set(a).isdisjoint(b)

0
len(set(a+b)) < len(set(a)) + len(set(b))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接