查找列表的 x 最小值的索引

Find indices of x minimum values of a list

我有一个长度为 n 的列表。

我想找到包含此列表的 5 个最小值的索引。

我知道如何使用 operator

找到保持最小值的索引
min_index,min_value = min(enumerate(list), key=operator.itemgetter(1))

是否可以更改此代码以获得我想要的 5 个索引的列表?

虽然这需要对整个列表进行排序,但您可以获得 sorted 列表的一部分:

data = sorted(enumerate(list), key=operator.itemgetter(1))[:5]

这样的事情怎么样?

    map(lambda x: [a.index(x),x],sorted(list)[:5])

这将 return 列表的列表,其中列表[x][0] = 索引和列表[x][1] = 值

编辑:

这假设列表没有重复的最小值。正如 adhg McDonald-Jensen 指出的那样,这只会 return 给定值的第一个实例。

如果使用包heapq,可以通过nsamllest:

完成
heapq.nsmallest(5, enumerate(list), key=operator.itemgetter(1))