是否有Pythonic方式返回列表中的第一个项目,该列表也是另一个列表中的项目?目前我正在使用蛮力和无知来做这件事:
def FindFirstMatch(a, b):
"""
Returns the first element in a for which there is a matching
element in b or None if there is no match
"""
for item in a:
if item in b:
return item
return None
所以FindFirstMatch(['Fred','Wilma','Barney','Betty'], ['Dino', 'Pebbles', 'Wilma', 'Bambam'])
返回'Wilma'
,但我想知道是否有更优雅/更有效/ Pythonic方式。
答案 0 :(得分:5)
您可以使用生成器表达式和'next()'函数。示例 -
def FindFirstMatch(list1, list2):
"""
Returns the first element in list "list1" for which there is a matching
element in list "list2" or None if there is no match
"""
setb = set(list2)
return next((item for item in list1 if item in setb),None)
如果“list2”中不存在符合条件的此类项目,也会返回None
。
在上面的函数中,我首先将列表'list2'转换为set
,以便在其中搜索可以在恒定时间内完成(否则在list
中搜索是O(n)时间复杂度操作)。