在python列表中N max值的位置?

时间:2018-05-22 23:52:46

标签: python

我有一个python列表(包含整数),我想在列表中找到N个最高值的索引。其中N小于列表的长度。

我可以通过对列表进行排序来找到N个最大值,但是有没有很好的方法来找到这N个最大值的位置?

例如,我的列表是a = [10,16,29,1,4,5,7,9,13,15],我需要找到3个最高值的位置。

预期结果为[2,1,9]

5 个答案:

答案 0 :(得分:3)

基本上是肖恩布雷肯里奇所说的,但要给你你所要求的确切输出:

Entry  Name                   Description
-----  ----                   -----------
1     Sample                  Executing, elapsed time: 602.18:57:06.
3     Sample                  Executing, elapsed time: 481.18:57:02.
5     Sample                  Halted , elapsed time: 484.18:56:58.
7     Sample                  Hold, elapsed time: 680.18:56:55.
7     Sample                  Executing, elapsed time: 680.18:56:54.
7     Sample                  Executing, elapsed time: 680.18:56:53.
9     Sample                  Halted, elapsed time: 666.18:57:09.
1     Sample                  halted, elapsed time: 684.18:57:01.

答案 1 :(得分:2)

>>> import operator
>>> lst = [10,16,29,1,4,5,7,9,13,15]
>>> indexed = list(enumerate(lst)) # attach indices to the list
>>> indexed
[(0, 10), (1, 16), (2, 29), (3, 1), (4, 4), (5, 5), (6, 7), (7, 9), (8, 13), (9, 15)]
# use operator.itemgetter to get the index '1' of the (index, value) tuple
>>> top_3 = sorted(indexed, key=operator.itemgetter(1))[-3:]
>>> list(reversed([i for i, v in top_3]))
[2, 1, 9]

答案 2 :(得分:2)

您可以使用pandas

轻松完成此操作
>>> import pandas as pd
>>> lst = pd.Series([10, 16, 29, 1, 4, 5, 7, 9, 13, 15])
>>> i = lst.nlargest(3)
>>> i.index.values.tolist()
[2, 1, 9]

答案 3 :(得分:1)

简单,优雅的解决方案。不需要导入任何东西或使用特殊工具。 :d

w_text.replace("his", "here").replace("john", "alles")

答案 4 :(得分:1)

numpy库具有工具和函数式编程范例,有时可以使这样的事情变得简单。你转换为numpy.array类型(让我们称之为x)然后x.argmax()给你最大的位置。将一个'1'放在另一个长度相同的数组中,在所有其他地方都是零(你可以通过说index-numpy.zeros(len(x)))。

从那里你可以弄清楚如何再做两次,但是在索引数组中排除零以外的值。

我怀疑numpy甚至有一个方法,对于给定的输入数组,它为您提供按增加值排序的索引。在这种情况下,它是微不足道的:只需要从该方法获得的列表中的前三个索引(它可能是.sort())。

NUMPY绝对值得了解几乎所有其他图书馆