[英]Finding if any element in a list is in another list and return the first element found
使用any()
可以很容易地检查列表的元素是否在另一个列表中:
any(elem in list2 for elem in list1)
但无论如何以惯用的方式返回找到的第一个元素?
我更喜欢单线解决方案,而不是:
for elem in list1:
if elem in list2:
return elem
使用集: https : //docs.python.org/2/library/sets.html
result = set(list1) & set(list2)
如果你想让它像任何条件一样有条件:
if (set(list1) & set(list2)):
do something
这个答案类似于类似问题 的答案 ,其中@jamylak详细介绍了与其他算法相比的结果计时。
如果您只想要匹配的第一个元素,请使用next
:
>>> a = [1, 2, 3, 4, 5]
>>> b = [14, 17, 9, 3, 8]
>>> next(element for element in a if element in b)
3
这不是太有效,因为它为每个元素执行b
的线性搜索。 您可以从b
创建一个具有更好查找性能的set
:
>>> b_set = set(b)
>>> next(element for element in a if element in b_set)
如果next
没有找到任何内容,则会引发异常:
>>> a = [4, 5]
>>> next(element for element in a if element in b_set)
Traceback (most recent call last):
StopIteration
你可以给它一个默认值来返回,例如None
。 但是,这会更改解析函数参数的语法,并且必须显式创建生成器表达式:
>>> None is next((element for element in a if element in b_set), None)
True
这样做:
[e for e in a if e in b]
是的,通过在进行列表理解时使用过滤器是可能的:
list1 = ['a', 'b', 'c', 'd', 'e']
list2 = ['g', 'z', 'b', 'd', '33']
[elem for elem in list1 if elem in list2]
# ['b', 'd']
使用列表理解:
[elem for elem in list1 if elem in list2]
例:
list1 = [1, 2, 3, 4, 5]
list2 = [1, 10, 2, 20]
c = [elem for elem in list1 if elem in list2]
print(c)
产量
[1, 2]
def intersect(a, b):
return list(set(a) & set(b))
print intersect(b1, b2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.