python列表排序并返回索引

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python列表排序并返回索引相关的知识,希望对你有一定的参考价值。

参考技术A numpy中有函数argsort来返回排序后的下标

结果

pytorch中的torch.sort本身就能返回排序后的下标

Python中没有直接调用的接口,怎么办呢?
用enumerate再排序就可以了

结果

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

【中文标题】比较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列表排序并返回索引的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在 Python 中获取已排序数组的索引

python之路第六天(补)

Python numpy 保留已排序二维数组的索引列表

在 Python 中,如何找到排序列表中第一个大于阈值的值的索引?

k元组排序中的python列表索引超出范围