繁体   English   中英

在python中对列表进行排序后如何获取原始索引

[英]How to get the original indexes after sorting a list in python

我的清单如下。

mylist= [0.0, 0.4, 0.81, 1.0, 0.9, 20.7, 0.0, 0.8, 1.0, 20.7]

我想获取列表的前4个元素的索引(即[5, 9, 3, 8] ),并删除值小于或等于1( <=1 )的索引。

因此,我的最终输出应为[5, 9]

我当前的代码如下:

sorted_mylist = sorted(mylist, reverse = True)[:4]
for ele in sorted_mylist:
    if ele>1:
       print(mylist.index(ele))

但是,它返回[5, 5] ,这是不正确的。

请让我知道如何在python中解决此问题?

您应该使用enumerate

mylist= [0.0, 0.4, 0.81, 1.0, 0.9, 20.7, 0.0, 0.8, 1.0, 20.7]

indices = [index for index, value in sorted(enumerate(mylist), reverse=True, key=lambda x: x[1]) if value > 1][:4]
# [5, 9]

您可以对列表和索引进行排序,以便以后可以轻松检索索引,例如:

码:

sorted_mylist = sorted(((v, i) for i, v in enumerate(mylist)), reverse=True)

测试代码:

mylist = [0.0, 0.4, 0.81, 1.0, 0.9, 20.7, 0.0, 0.8, 1.0, 20.7]

sorted_mylist = sorted(((v, i) for i, v in enumerate(mylist)), reverse=True)
result = []
for i, (value, index) in enumerate(sorted_mylist):
    if i == 4:
        break
    if value > 1:
        result.append(index)

print(result)

结果:

[9, 5]

以上所有答案都是好的,但是如果您不坚持使用当前代码,而只是想解决您自己的问题,那么这是熊猫的另一种选择,仅供参考:

import pandas as pd
mylist= [0.0, 0.4, 0.81, 1.0, 0.9, 20.7, 0.0, 0.8, 1.0, 20.7]
s = pd.Series(mylist).sort_values(ascending=False)[:4]
s = s[s > 1]
print s.index.tolist()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM