第一种方法:heapq内置函数 + map
基本思想:
使用heapq内置函数 + map 建立前n个最大值和最小值的映射。
代码
import heapq
def getListMaxNumIndex1(num_list,topk=3):
# 使用heapq内置函数 + map
max_num_index=map(num_list.index, heapq.nlargest(topk,num_list))
min_num_index=map(num_list.index, heapq.nsmallest(topk,num_list))
print('max_num_index:',list(max_num_index))
print('min_num_index:',list(min_num_index))
num_list=[13,4,-8,3,1,43,55,2,7,11,78]
getListMaxNumIndex1(num_list,topk=3)
运行结果:
第二种方法:建立副本+遍历
代码
import copy
def getListMaxNumIndex2(num_list,topk=3):
# 复制一个作为副本
tmp_list=copy.deepcopy(num_list)
tmp_list.sort()
max_num_index=[num_list.index(one) for one in tmp_list[::-1][:topk]]
min_num_index=[num_list.index(one) for one in tmp_list[:topk]]
print('max_num_index:',max_num_index)
print('min_num_index:',min_num_index)
num_list=[13,4,-8,3,1,43,55,2,7,11,78]
getListMaxNumIndex2(num_list,topk=4)
运行结果:
第三种方法:字典形式
代码
def getListMaxNumIndex3(num_list,topk=3):
num_dict={}
for i in range(len(num_list)):
num_dict[i]=num_list[i]
res_list=sorted(num_dict.items(),key=lambda e:e[1])
max_num_index=[one[0] for one in res_list[::-1][:topk]]
min_num_index=[one[0] for one in res_list[:topk]]
print('max_num_index:',max_num_index)
print('min_num_index:',min_num_index)
num_list=[13,4,-8,3,1,43,55,2,7,11,78]
getListMaxNumIndex3(num_list,topk=5)
运行结果:
第四种方法:遍历
代码
import copy
def getListMaxNumIndex4(num_list,topk=3):
# 遍历
tmp_list=copy.deepcopy(num_list)
max_num=sum([abs(O) for O in num_list])
min_num=-1*max_num
min_num=-1*max_num
max_num_index,min_num_index=[],[]
for i in range(topk):
one_max_index=num_list.index(max(num_list))
max_num_index.append(one_max_index)
num_list[one_max_index]=min_num
for i in range(topk):
one_min_index=tmp_list.index(min(tmp_list))
min_num_index.append(one_min_index)
tmp_list[one_min_index]=max_num
print('max_num_index:',max_num_index)
print('min_num_index:',min_num_index)
num_list=[13,4,-8,3,1,43,55,2,7,11,78]
getListMaxNumIndex4(num_list,topk=6)
运行结果:
注意
如果是其他形式的数据 使用 .tolist() 将数据转化成矩阵形式输入即可!
前三种不可以识别重复值!最后一种可以!