查找列表A中的第一个索引,其中值位于列表B中

时间:2016-07-06 09:05:33

标签: python list python-2.7

我想在A中找到包含B值的第一个索引。例如:

A = [1, 'Q', 3, 6, 'R']
B = ['Z', 'I', 'O', 3]
A.function(B)  # would return 2

有一种简单的方法吗?显然,您可以在A中搜索B中的每个项目并获取最小索引,但这比为每个索引尝试所有B要慢。

2 个答案:

答案 0 :(得分:4)

我认为有两种广泛的方法,取决于哪个列表更长:

  1. A超过B

    一次在A中添加一项,看看它是否在B中。重复,直到找到第一个。

    next(index for index, item in enumerate(A) if item in B)
    

    如果将B转换为set(感谢@khelwood),这会更有效率,但请务必在开始之前执行,而不是生成器表达式。

  2. B超过A

    A中的每个项目的B中找到索引,然后最小化:

    indices = []
    for item in B:
        try:
            indices.append(A.index(item))
        except ValueError:
            pass
    min(indices)
    

    请注意,您无法使用:

    min(index for index in map(A.index, B) if index > -1)
    

    (哎呀!)因为list没有方法来获取没有错误的索引(参见例如list.index() function for Python that doesn't throw exception when nothing found)。

答案 1 :(得分:0)

最简单的方法是迭代第一个列表中的每个元素,并检查每个元素是否在第二个列表中。

def firstInBoth(A, B):
    for x in range(len(A)):
        if A[x] in B:
            return x