我想在A
中找到包含B
值的第一个索引。例如:
A = [1, 'Q', 3, 6, 'R']
B = ['Z', 'I', 'O', 3]
A.function(B) # would return 2
有一种简单的方法吗?显然,您可以在A
中搜索B
中的每个项目并获取最小索引,但这比为每个索引尝试所有B
要慢。
答案 0 :(得分:4)
我认为有两种广泛的方法,取决于哪个列表更长:
A
超过B
:
一次在A
中添加一项,看看它是否在B
中。重复,直到找到第一个。
next(index for index, item in enumerate(A) if item in B)
如果将B
转换为set
(感谢@khelwood),这会更有效率,但请务必在开始之前执行,而不是生成器表达式。
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