使用以下命令很容易检查列表的元素是否在另一个列表中any():
any(elem in list2 for elem in list1)
Run Code Online (Sandbox Code Playgroud)
但无论如何,有没有惯用的方式来返回找到的第一个元素?
我更喜欢单行解决方案,而不是:
for elem in list1:
if elem in list2:
return elem
Run Code Online (Sandbox Code Playgroud)
使用集:https ://docs.python.org/2/library/sets.html
result = set(list1) & set(list2)
Run Code Online (Sandbox Code Playgroud)
如果你想让它像任何条件一样:
if (set(list1) & set(list2)):
do something
Run Code Online (Sandbox Code Playgroud)
这个答案与类似问题的答案类似,其中 @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
Run Code Online (Sandbox Code Playgroud)
b这不是太有效,因为它对每个元素执行线性搜索。您可以创建一个set具有b更好查找性能的:
>>> b_set = set(b)
>>> next(element for element in a if element in b_set)
Run Code Online (Sandbox Code Playgroud)
如果next没有找到任何东西,则会引发异常:
>>> a = [4, 5]
>>> next(element for element in a if element in b_set)
Traceback (most recent call last):
StopIteration
Run Code Online (Sandbox Code Playgroud)
您可以给它一个默认值来代替,例如None。然而,这改变了函数参数解析方式的语法,您必须显式创建一个生成器表达式:
>>> None is next((element for element in a if element in b_set), None)
True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3253 次 |
| 最近记录: |