48 python
让我说我有一个列表
a=[1,2,3]
我想知道其中至少有一个数字是否存在于另一个列表中,如下所示:
b=[4,5,6,7,8,1]
换句话说,我想知道列表中是否存在1,2或3 b
.我现在可以做点什么了
def func(a, b):
for i in a:
if i in b:
return True
return False
Run Code Online (Sandbox Code Playgroud)
但有可能有办法把它放在一条线上以使事情变得整洁吗?
Tho*_*mas 65
Python 2.6及以上版本:
def func(a, b):
return not set(a).isdisjoint(b)
Run Code Online (Sandbox Code Playgroud)
对于2.4或2.5:
def func(a, b):
return len(set(a).intersection(b)) != 0
Run Code Online (Sandbox Code Playgroud)
2.3及以下:
sudo apt-get update
sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)
;)
Dou*_*gal 57
有很多方法可以做到这一点.最直接的翻译是:
any_in = lambda a, b: any(i in b for i in a)
Run Code Online (Sandbox Code Playgroud)
您还可以使用涉及集合的各种事物,例如:
any_in = lambda a, b: bool(set(a).intersection(b))
Run Code Online (Sandbox Code Playgroud)
(这取决于a
可以清洗的元素,但是如果这是真的,那么制作一组较大的a
并且b
对于这些方法中的任何一种方法可能会更快).
编辑:isdisjoint
比intersection
Python 2.6及更高版本更好,正如以下各方所指出的那样.很高兴了解这一点.:)
mat*_*ata 50
一个简单的单行将是:
any(i in b for i in a)
Run Code Online (Sandbox Code Playgroud)
Ray*_*ger 14
这是一个集合问题,而不是列表问题.使用正确的数据类型,答案通常很明显:-)
def func(a, b):
return not set(a).isdisjoint(b)
Run Code Online (Sandbox Code Playgroud)
通过将列表转换为集合,您可以对它们执行集合操作.如果交集大于0,则至少有一个元素匹配:
len(set(a) & set(b)) > 0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
50887 次 |
最近记录: |