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 中的任何元素。
要获取值匹配的索引列表,
- 比较两个列表中相同索引处的元素
- 如果元素相等,则将索引保存到输出数组。
代码:
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]
请注意,即使列表的长度不同,这也会起作用。
我有两个包含值的大小相同的列表。我想创建第三个列表,其中包含值相同的索引。
在 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 中的任何元素。
要获取值匹配的索引列表,
- 比较两个列表中相同索引处的元素
- 如果元素相等,则将索引保存到输出数组。
代码:
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]
请注意,即使列表的长度不同,这也会起作用。