首页 > 解决方案 > 在 for 循环中对数字进行排序,同时保留索引值

问题描述

检索 i、v 列表的代码:

 for i, v in enumerate(Some_array):
    print(i, v)

输出

0 -100
1 30
2 -90
3 -80
4 100
5 1000
and so on

基本上我们所有的 Vs 都在 100、30、-90 等以上。我想按照 v 从大到小的顺序对整个 i,v 进行排序

预期产出

5 1000 
4 100
1 30
3 -80
2 -90
0 -100

我希望索引值保持不变。他们不应该被排序。只有 v 值应该被排序。所有其他答案也对 i 值进行排序,而不是 5,4,1,3,2,0 我们得到 0,1,2,3,4,5 作为我不想要的索引。提到了预期的输出

标签: pythonpandasdataframesorting

解决方案


sortedenumerate(Some_array)、 lambda 函数和参数一起使用reverse=True

Some_array = [-100,30,-90,-80,100,1000]

for i, v in sorted(enumerate(Some_array), key=lambda tup: tup[1], reverse=True):
    print (i, v)
5 1000
4 100
1 30
3 -80
2 -90
0 -100

编辑:

Some_array = [-100,30,-90,-80,100,1000]

topN = 3
for i, v in sorted(enumerate(Some_array), key=lambda tup: tup[1], reverse=True)[:topN]:
    print (i, v)
    5 1000
    4 100
    1 30

推荐阅读