我有一个python列表(包含整数),我想在列表中找到N个最高值的索引。其中N小于列表的长度。
我可以通过对列表进行排序来找到N个最大值,但是有没有很好的方法来找到这N个最大值的位置?
例如,我的列表是a = [10,16,29,1,4,5,7,9,13,15],我需要找到3个最高值的位置。
预期结果为[2,1,9]
答案 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绝对值得了解几乎所有其他图书馆