Python獲取list中最大或最小的n個數及其索引方式
更新時間:2025年09月01日 09:51:43 作者:還是少年呀
文章介紹兩種獲取列表最大/最小值的方法:方法一通過深拷貝逐次定位并置零,適應重復值場景;方法二利用heapq模塊,適用于無重復值情況,重復時需結合方法一,兩種方法各有優(yōu)劣,代碼示例展示不同場景下的實現效果
求取list中的最大或者最小的幾個數字可以使用以下方法
方法一
使用深拷貝的方法,copy需要求索引的list,每次求最大或者最小值及其索引,并置相應位置的值為0,迭代n次。
代碼如下:
import copy
m = [34,94,35,78,45,67,23,90,1,0]
t = copy.deepcopy(m)
# 求m個最大的數值及其索引
max_number = []
max_index = []
for _ in range(2):
number = max(t)
index = t.index(number)
t[index] = 0
max_number.append(number)
max_index.append(index)
t = []
print(max_number)
print(max_index)結果: [94, 90] [1, 7]
該方法適應性好,即使數值有重復的,也能得到和其數值對應的索引。
方法二
使用heapq包中的方法,當所求的最大或最小的n個數值不重復時可以直接求出相應的數值和對應的索引,當有重復值的時候還是需要借鑒方法一的思路。
無重復值的代碼
import heapq m = [34,94,35,78,45,67,23,90,1,0] # 求一個list中最大的2個數,并排序 max_number = heapq.nlargest(2, m) # 最大的2個數對應的,如果用nsmallest則是求最小的數及其索引 max_index = map(m.index, heapq.nlargest(2, m)) print(max_number) # max_index 直接輸出來不是數,使用list()或者set()均可輸出 print(set(max_index))
結果:
[94, 90]
{1, 7}
有重復值的代碼
import heapq
m = [9, 8, 8, 6, 6, 5, 4, 2, 2, 0]
max_number = heapq.nlargest(3, m)
max_index = []
for t in max_number:
index = m.index(t)
max_index.append(index)
m[index] = 0
print(max_number)
print(max_index)結果:
[9, 8, 8] [0, 1, 2]
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
TensorFlow2基本操作之 張量排序 填充與復制 查找與替換
這篇文章主要介紹了TensorFlow2基本操作之 張量排序 填充與復制 查找與替換,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09

