比较python中的两个列表并返回匹配值的索引

Posted

技术标签:

【中文标题】比较python中的两个列表并返回匹配值的索引【英文标题】:compare two lists in python and return indices of matched values 【发布时间】:2012-05-09 04:03:30 【问题描述】:

对于两个列表 a 和 b,如何获取两者中出现的值的索引?例如,

a = [1, 2, 3, 4, 5]
b = [9, 7, 6, 5, 1, 0]

return_indices_of_a(a, b)

将返回[0,4],并返回(a[0],a[4]) = (1,5)

【问题讨论】:

Python: How to find list intersection?的可能重复 我不认为这个问题与那个问题重复,即使它可能相似。 【参考方案1】:

对于较大的列表,这可能会有所帮助:

for item in a:
index.append(bisect.bisect(b,item))
    idx = np.unique(index).tolist()

一定要导入 numpy。

【讨论】:

【参考方案2】:

最好的方法是将b 设为set,因为您只检查其中的成员身份。

>>> a = [1, 2, 3, 4, 5]
>>> b = set([9, 7, 6, 5, 1, 0])
>>> [i for i, item in enumerate(a) if item in b]
[0, 4]

【讨论】:

非常感谢!这种情况呢:'a = [1, 2, 9, 8]' 和 'b = [1, 9, 1]' (b 是 a 的子集),其中所需的结果是 '[0, 2, 0 ]'(匹配 b 中每个值的 a 的索引)?使 b 成为一个集合将丢失第二个 '1' 的索引以及索引的序列。 在那种情况下不会是[0, 2, 0, 1, 2] 或类似的东西吗? (因为b 的所有项目都出现在两个列表中) 我还不清楚...在这种情况下我需要的结果indices 将给出array(a)[indices] = b。我已经编辑了这个问题。也许那里的描述更清楚。 您应该将您的第二个案例作为一个新问题打开,因为这里没有人会看到它。【参考方案3】:
def return_indices_of_a(a, b):
  b_set = set(b)
  return [i for i, v in enumerate(a) if v in b_set]

【讨论】:

以上是关于比较python中的两个列表并返回匹配值的索引的主要内容,如果未能解决你的问题,请参考以下文章

比较两个列表并使用 linq 返回不匹配的项目

递归比较两个列表

如何比较两个熊猫数据框并返回将它们相互映射的索引?

通过Python中的正则表达式优化在两个列表之间查找匹配子字符串

pandas 对比两个列表

python中列表,字典,字符串常用操作