Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数组中的大数索引_Python_List - Fatal编程技术网

Python 数组中的大数索引

Python 数组中的大数索引,python,list,Python,List,给定一个数字数组,Python中返回该数组中前1/3%最大数字的索引的快捷方法是什么 例如,[4,8,2,7,6,3],返回[1,3](8和7的指数) 谢谢,直截了当的方法是 l1 = [4,8,2,7,6,3] elts = sorted(l1, reverse=True)[0:int(len(l1)/3)] idcs = [l1.index(e) for e in elts] print(idcs) 如果您只关心快速实施,而不关心效率: a = [4, 8, 2, 7, 6, 3] b =

给定一个数字数组,Python中返回该数组中前1/3%最大数字的索引的快捷方法是什么

例如,[4,8,2,7,6,3],返回[1,3](8和7的指数)


谢谢,

直截了当的方法是

l1 = [4,8,2,7,6,3]
elts = sorted(l1, reverse=True)[0:int(len(l1)/3)]
idcs = [l1.index(e) for e in elts]
print(idcs)

如果您只关心快速实施,而不关心效率:

a = [4, 8, 2, 7, 6, 3]
b = [(i, j) for i, j in enumerate(a)]
c = sorted(b, key=lambda x: x[1])
d = [x[0] for x in c[-(len(c) // 3):]]

d将包含:
[3,1]
您可以将列表转换为
(元素,索引)
元组的列表,然后使用。然后,我们可以使用列表从结果列表中选择索引

>>> from heapq import nlargest
>>> lst = [4,8,2,7,6,3]
>>> n = len(lst) // 3
>>> idx = [(e, i) for i, e in enumerate(lst)]
>>> [i for _, i in nlargest(n, idx)]
[1, 3]
heapq.nlargest的文档中:

从iterable定义的数据集中返回一个包含n个最大元素的列表。键(如果提供)指定一个参数的函数,该参数用于从iterable中的每个元素提取比较键(例如,key=str.lower)。等效于:排序(iterable,key=key,reverse=True)[:n]


有。但是,您是如何尝试的?尝试在哪里出错?对数组进行降序排序,并从数组的开头提取任意数量的最高数字。如果您仍然需要原始数组的结果索引,请使用我上面描述的结果,使用嵌套循环搜索原始数组。
[x.index(num)对于排序中的num(x,reverse=True)[:len(x)//3]]
优于排序+1.