从 python 上的列表中获取索引

get indexes from a list on python

我需要从这个列表的最小元素中获取所有索引:

A = [5,2,1,5,6,1,7,9,2]


minimo = min(A)
#print minimo
indexArray = []
for elem in A:
    #print elem
    if elem == minimo:
        indexArray.append(A.index(elem))
print indexArray

需要这个输出:[2,5] 但它打印:[2,2]

您可以将 list-comprehensionenumerate() 一起使用。由于 @MikeScotty,性能改进是首先计算最小值。

代码如下:

mn = min(A)
[i for i,e in enumerate(A) if e == mn]

给出:

[2, 5]

这是 A1s 的索引 - 不是 [2, 8]


为了证明这更快,这里是 minx wrapper:

>>> def minx(l):
...     print("called")
...     return min(l)
... 
>>> [i for i,e in enumerate(A) if e == minx(A)]
called
called
called
called
called
called
called
called
called
[2, 5]

一些时间使用 timeit:

>>> timeit.timeit("[i for i,e in enumerate(A) if e == min(A)]", globals=locals())
5.9568054789997404
>>> timeit.timeit("[i for i,e in enumerate(A) if e == 1]", globals=locals())
1.397674421001284

你也可以试试这个:

A = [5,2,1,5,6,1,7,9,2]
minimum = min(A)
res = list(filter(lambda m: A[m]==minimum, range(len(A))))
print(res)

输出为:

[2, 5]

因为当你使用

A.index(elem)

它等于A.index(1),1的索引永远是2。你可以试试这个脚本:

A=[5,2,1,5,6,1,7,9,2]
minimo = min(A)
indexArray = []
for index,value in enumerate(A):
    if value == minimo:
        indexArray.append(index)
print(indexArray)