我有一个如下列表。
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中修复此问题?
答案 0 :(得分:5)
您应该使用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]
答案 1 :(得分:2)
您可以将列表与索引一起排序,以便稍后可以轻松检索索引,如:
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]
答案 2 :(得分:2)
以上所有答案都很好,但是如果你不坚持使用当前的代码,并且只是想解决你自己的问题,那么pandas就是另一种选择,只有FYI:
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()