0
我正在尝试查找列表中四个最高值的索引。列表中四个最高值的索引
到目前为止我的代码中查找最高:
for i, j in enumerate(Si['S1']):
if j == max(Si['S1']):
numberofhighest=i
,但我不知道如何找到四个最高不排序或删除我的列表中的值。你能帮助我吗?
我正在尝试查找列表中四个最高值的索引。列表中四个最高值的索引
到目前为止我的代码中查找最高:
for i, j in enumerate(Si['S1']):
if j == max(Si['S1']):
numberofhighest=i
,但我不知道如何找到四个最高不排序或删除我的列表中的值。你能帮助我吗?
如果您打算使用标准库,heapq.nlargest
和enumerate
的组合应该可以正常工作。
设置:
>>> 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(...))
。
我投票结束这个问题作为题外话,因为这既不是代码写作也不是教程服务 – jonrsharpe
你可以做*部分*排序。例如,请参阅http://stackoverflow.com/questions/4555820/how-can-i-partially-sort-a-python-list – NPE
另外,顺便说一下,您的当前解决方案已经比完整排序更昂贵(操作的数量随着元素数量的平方增长,好的排序算法可以做得比这更好)。 – NPE