[英]find top k largest item of a list in original order in python
說我有以下列表:
my_list = [3.5, 1.6, 2.4, 8.9, 5.6]
我想在原來的地方找到前3個最大的數,所以結果應該是:
[3.5, 8.9, 5.6]
我怎么能那樣做? 我想我可以找到最大的 3 個數字並使用過濾器,但我認為比較浮點數可能不是一個好主意。 有什么建議么?
使用堆:
>>> import heapq
>>> heapq.nlargest(3, my_list)
[8.9, 5.6, 3.5]
為相同的想法添加一點潤色,以保持它們的原始順序:
>>> from operator import itemgetter
>>> i_val = heapq.nlargest(3, enumerate(my_list), key=itemgetter(1))
>>> [val for (i, val) in sorted(i_val)]
[3.5, 8.9, 5.6]
您可以按值對索引值對(由enumerate
生成)進行排序,獲取最后三對,然后按索引對它們進行排序(然后僅從索引值對中獲取值,所有這些都在一個-班輪列表理解):
from operator import itemgetter
my_list = [3.5, 1.6, 2.4, 5.6, 8.9]
result = [p[1] for p in sorted(sorted(enumerate(my_list), key = itemgetter(1))[-3:], key = itemgetter(0))]
print(result)
Output:
[3.5, 5.6, 8.9]
在這里你go,你可以試試這個function:
my_list = [3.5, 1.6, 2.4, 5.6, 8.9]
def select_top(a,array):
new_list = []
extra_list = []
for i in range(len(my_list)):
extra_list.append(my_list[i])
final_list = []
for i in range(a):
new_list.append(extra_list.index(max(extra_list)))
extra_list.pop(extra_list.index(max(extra_list)))
new_list = sorted(new_list,reverse=False)
for i in new_list:
final_list.append(array[i])
return final_list
print(select_top(3,my_list))
我相信它遠非最佳,但您可以盡可能多地調整它以獲得前 k 個數字並讓它們按原始順序返回。 Output:
[3.5, 5.6, 8.9]
這個怎么樣?
[m for m in my_list if m in sorted(my_list)[-3:]]
您正在從前 3 個項目中構建一個新的“m”項目列表。 列表理解使您的項目井井有條。
您的示例的順序是這樣的,您可以對其進行排序並獲取前 3 個項目,但我認為您的意思是您可能沒有按順序排列前 3 個項目,例如:
my_list = [3.5, 1.2, 0.3, 7.8, 3.3]
這導致
[3.5,7.8,3.3]
這是我自己的答案,它可以解決問題。
my_list = [3.5, 1.6, 2.4, 8.9, 5.6]
top_k = sorted(my_list)[-3:]
result = list(filter(lambda x : x in top_k,my_list))
print(result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.