从 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-comprehension
与 enumerate()
一起使用。由于 @MikeScotty
,性能改进是首先计算最小值。
代码如下:
mn = min(A)
[i for i,e in enumerate(A) if e == mn]
给出:
[2, 5]
这是 A
中 1s
的索引 - 不是 [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)
我需要从这个列表的最小元素中获取所有索引:
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-comprehension
与 enumerate()
一起使用。由于 @MikeScotty
,性能改进是首先计算最小值。
代码如下:
mn = min(A)
[i for i,e in enumerate(A) if e == mn]
给出:
[2, 5]
这是 A
中 1s
的索引 - 不是 [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)