查找列表中是否有元素在另一个列表中,并返回找到的第一个元素

2024-05-04 11:01:29 发布

您现在位置:Python中文网/ 问答频道 /正文

使用any()可以很容易地检查列表中的某个元素是否在另一个列表中:

any(elem in list2 for elem in list1)

但是有没有惯用的方法来返回找到的第一个元素?在

我更喜欢一条线解决方案,而不是:

^{pr2}$

Tags: 方法in元素列表forany解决方案惯用
3条回答

这样做:

[e for e in a if e in b]

这个答案类似于a similar question上的an answer,其中@jamylak与其他算法相比更详细地说明了结果的计时。在

如果只需要匹配的第一个元素,请使用^{}

>>> 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,它具有更好的查找性能:

^{pr2}$

如果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

使用集:https://docs.python.org/2/library/sets.html

result = set(list1) & set(list2)

如果你想把它变成一个条件的话:

^{pr2}$

相关问题 更多 >