【问题标题】:compare two lists in python and return indices of matched values比较python中的两个列表并返回匹配值的索引
【发布时间】: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 list match indices


【解决方案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]
    

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      • 2021-09-19
      相关资源
      最近更新 更多