Python: 获取两个列表中值相同的索引

Python: get the index of two list where the values are the same

我有两个包含值的大小相同的列表。我想创建第三个列表,其中包含值相同的索引。

在 Whosebug 上我发现了这段代码:

def return_indices_correlated_guess(a, b):
  b_set = set(b)
  return [i for i, v in enumerate(a) if v in b_set]  

但出于某种原因,它只是 returns 我一个包含从 0 到列表大小的值的列表。

这是列表 a:

[1, 1, 1, None, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, None, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0]   

这是列表 b:

 [1, 0, 1, 1, None, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]   

这是 return_indices_correlated_guess(a,b) 返回的列表:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46]   

结果应该是一个包含[0,2,...]

的列表

您发布的代码保存了第一个列表 a 的索引,其中存在列表 b 中的任何元素。

要获取值匹配的索引列表,

  1. 比较两个列表中相同索引处的元素
  2. 如果元素相等,则将索引保存到输出数组。

代码:

def return_indices_correlated_guess(a, b):
  return [i for i, v in enumerate(a) if v == b[i]]

a=[1, 1, 1, None, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, None, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0]

b= [1, 0, 1, 1, None, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

print(return_indices_correlated_guess(a,b))

# or simply 
print([i for i, v in enumerate(a) if v == b[i]])

输出:

[0, 2, 5, 8, 9, 10, 12, 15, 19, 23, 26, 28, 38, 46]

是的,您提供的函数正在返回另一个列表中的值的索引,但不在同一索引中。

这里有一个解决问题的示例:

def return_indices_correlated_guess(a, b):
  return [i for i, v in enumerate(a) if v == b[i]]

zip 投进擂台:

def return_indices_correlated_guess(a, b):
    return [i for i, (x, y) in enumerate(zip(a, b)) if x == y]

请注意,即使列表的长度不同,这也会起作用。