得到一个列表索引上的蟒蛇
我需要把所有从该列表中的最小元素索引:得到一个列表索引上的蟒蛇
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]
这是1s
在A
的指标 - 不[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
这将为每个元素调用''min'',这可以使用巨大的列表进行一些性能测试。更好地获得列表理解之外的最小元素,即使它意味着有2行而不是1 –
@MikeScotty我会更新答案,但是看看Python *是否真的重新评估它会很有趣。我不确定,也无法通过谷歌找到答案,这是真的吗? –
是的,如果你构建自己的''minX(L)''方法作为'min()'的封装并且打印出来,你就可以测试它 - 你会看到每次迭代都会调用它。 –
你可以试试这一件:
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]
在语言中实现列表理解的坚实理由:) – roganjosh
@roganjosh我同意列表理解比使用'filter'更具可读性。以防万一,我只是把它作为一种替代方式呈现出来。 –
因为当你使用
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)
在重复的情况下, ,只需检查'== min(A)'。 – roganjosh
'索引'只给你第一次出现。 – bhansa
** index **是一个函数,它返回序列中元素的** _ first _ **索引,这就是为什么结果列表中的元素是相同数字的原因。 – 2017-11-18 12:40:32