如果你想在未排序的列表中找到前n
个最小值,可以使用heapq.nsmallest()
函数,如果n
不是太大,这种方法可能更有效率。如果你想找到最小值的位置,可以尝试以下代码:
>>> from heapq import nsmallest
>>> from random import random
>>> values = [random() for i in range(20)]
>>> values
[0.012227103410989537, 0.9782624648209769, 0.9896111545377924, 0.9033620518745159, 0.6767780103989406, 0.4595455061820246, 0.39814471642551696, 0.6904798136040561, 0.8727083752258934, 0.6680153337266017, 0.606044647078923, 0.5644656135679249, 0.934351848916147, 0.05955628567745763, 0.7236000566917332, 0.8303865367817055, 0.9671576336593124, 0.3164892315873573, 0.8416372881413415, 0.5009057933309073]
>>> nsmallest(4, range(len(values)), key=lambda i: values[i])
[0, 13, 17, 6]
或者更快但稍微不太清晰:
>>> nsmallest(4, range(len(values)), key=values.__getitem__)
[0, 13, 17, 6]
您可能需要以下类似列表(未经测试的代码):
def indices():
for k in range(47):
for j in range(1000):
for i in range(40):
yield k, j, i
def keyfn(ind):
k, j, i = ind
return list_a[k][j][i]
print(nsmallest(4, indices(), key=keyfn))