2016-03-06 51 views
0

我正在尝试查找列表中四个最高值的索引。列表中四个最高值的索引

到目前为止我的代码中查找最高:

for i, j in enumerate(Si['S1']): 
     if j == max(Si['S1']): 
      numberofhighest=i 

,但我不知道如何找到四个最高不排序或删除我的列表中的值。你能帮助我吗?

+0

我投票结束这个问题作为题外话,因为这既不是代码写作也不是教程服务 – jonrsharpe

+0

你可以做*部分*排序。例如,请参阅http://stackoverflow.com/questions/4555820/how-can-i-partially-sort-a-python-list – NPE

+0

另外,顺便说一下,您的当前解决方案已经比完整排序更昂贵(操作的数量随着元素数量的平方增长,好的排序算法可以做得比这更好)。 – NPE

回答

3

如果您打算使用标准库,heapq.nlargestenumerate的组合应该可以正常工作。

设置:

>>> from operator import itemgetter 
>>> from heapq import nlargest 
>>> a = [6, 2, 8, 9, 0, 4, 3, 7, 1, 5] # example 

获取最大的四个元素及其指数:

>>> nlargest(4, enumerate(a), itemgetter(1)) 
[(3, 9), (2, 8), (7, 7), (0, 6)] 

这会给你(index, value)元组的四个最大的价值。要提取指数,您可以使用列表理解或对map的另一个调用。

>>> [index for index, value in nlargest(4, enumerate(a), itemgetter(1))] 
[3, 2, 7, 0] 
>>> map(itemgetter(0), nlargest(4, enumerate(a), itemgetter(1))) 
[3, 2, 7, 0] 

在Python3,你需要手动从地图中的返回值构造一个列表,即list(map(...))