Python 查找列表中最小n个数字的索引

Python 查找列表中最小n个数字的索引,python,python-2.7,Python,Python 2.7,例如,l=[1,2,5,6,72234,52,4,11] 如何找到3个最小值的索引 最小的3个数字是1,2和4,因此所需的输出是[0,1,7] 我只能使用python 2.7 感谢一个简单的方法: l = [1,2,5,6,72,234,52,4,11] nsamllest = lambda l,n:map(lambda x:x[1],sorted([(x,i) for i,x in enumerate(l)],key=lambda x:x[0])[:n]) nsamllest(l,3) 输出

例如,
l=[1,2,5,6,72234,52,4,11]

如何找到3个最小值的索引

最小的3个数字是1,2和4,因此所需的输出是
[0,1,7]

我只能使用python 2.7

感谢一个简单的方法:

l = [1,2,5,6,72,234,52,4,11]
nsamllest = lambda l,n:map(lambda x:x[1],sorted([(x,i) for i,x in enumerate(l)],key=lambda x:x[0])[:n])
nsamllest(l,3)

输出:[0,1,7]

您可以改用
heapq.nsmalest

import heapq
from operator import itemgetter
[i for i, _ in heapq.nsmallest(3, enumerate(l), key=itemgetter(1))]
这将返回:

[0, 1, 7]

如果您想在数字列表中找到最小/最大的索引(这似乎是您的情况),那么我建议您使用numpy:

mylist=[1,2,5,6,72234,52,4,11]

import numpy as np
mindex = np.argmin(mylist)


maxinx=np.argmax(mylist)

您是否尝试过自己编写代码?Stackoverflow不是用来解决类似作业的问题的。@Karl这不是作业。这是任务的一小部分。我知道如何使用
nsmallest
然后获取每个项目的索引。但我认为有一种“更聪明”或更快的方法可以做到这一点。如果这只是援助的一小部分,它仍然在问一个非常广泛的问题,你希望人们解决这个问题。如果您有尝试,请将其包含在您的问题中,然后人们可以帮助您解决与该代码相关的任何问题。而“更快”的做事方式也是一个广泛的问题,没有看到任何可能意味着什么的代码。