使用any()
:
any(elem in list2 for elem in list1)
但无论如何都要以惯用的方式返回找到的第一个元素?
我更喜欢单行解决方案,而不是:
for elem in list1:
if elem in list2:
return elem
答案 0 :(得分:3)
使用套:https://docs.python.org/2/library/sets.html
result = set(list1) & set(list2)
如果你想让它像任何条件一样有条件:
if (set(list1) & set(list2)):
do something
答案 1 :(得分:2)
此答案类似于an answer上的a similar question,其中@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
的线性搜索并不太有效。您可以从set
创建一个b
,它具有更好的查找性能:
>>> 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
答案 2 :(得分:1)
这样做:
[e for e in a if e in b]
答案 3 :(得分:0)
是的,可以通过在进行列表理解时使用过滤器来实现:
list1 = ['a', 'b', 'c', 'd', 'e']
list2 = ['g', 'z', 'b', 'd', '33']
[elem for elem in list1 if elem in list2]
# ['b', 'd']
答案 4 :(得分:0)
使用列表理解:
[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]
答案 5 :(得分:0)
def intersect(a, b):
return list(set(a) & set(b))
print intersect(b1, b2)