2024-05-04 11:01:29 发布
网友
使用any()可以很容易地检查列表中的某个元素是否在另一个列表中:
any()
any(elem in list2 for elem in list1)
但是有没有惯用的方法来返回找到的第一个元素?在
我更喜欢一条线解决方案,而不是:
这样做:
[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,它具有更好的查找性能:
b
set
如果next找不到任何内容,则会引发异常:
next
>>> a = [4, 5] >>> next(element for element in a if element in b_set) Traceback (most recent call last): StopIteration
您可以给它一个默认的返回值,例如None。但是,这会改变函数参数解析的语法,您必须显式创建生成器表达式:
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)
如果你想把它变成一个条件的话:
这样做:
[e for e in a if e in b]
这个答案类似于a similar question上的an answer,其中@jamylak与其他算法相比更详细地说明了结果的计时。在
如果只需要匹配的第一个元素,请使用^{} :
这不是很有效,因为它对每个元素执行
^{pr2}$b
的线性搜索。您可以从b
创建一个set
,它具有更好的查找性能:如果
next
找不到任何内容,则会引发异常:您可以给它一个默认的返回值,例如
None
。但是,这会改变函数参数解析的语法,您必须显式创建生成器表达式:使用集:https://docs.python.org/2/library/sets.html
如果你想把它变成一个条件的话:
^{pr2}$相关问题 更多 >
编程相关推荐