返回包含在另一个列表中的Python列表中的第一项

时间:2015-10-16 12:55:55

标签: python

是否有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方式。

1 个答案:

答案 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)时间复杂度操作)。