2012-08-30 29 views
0

我有一个列表a,然后我使用max(a)获取最大值。下一步,我尝试使用enumerate()获取最大值的第一个位置。但它注意到我只能使用enumerate()作为int列表?如何浮动列表?有没有办法获得浮点数(也是int)列表中的最大值的第一个位置?非常感谢Python枚举(),浮动对象不可迭代

a = [1.5, 1.8, 3.1, 4.2, 5.5, 3.2, 4, 2, 1, 5.5, 3, 2.7] 
b = max(a) 
maxIndex = [i for i, j in enumerate(b) if j == b][0] 

回溯(最近通话最后一个): 文件“”,1号线,在 类型错误:“浮动”对象不是可迭代

+2

什么是你想实现与'枚举(B)'? 'b'是一个浮点数,而不是一个列表。你的意思是列举(a)'? – BrenBarn

+0

谢谢。我知道了。简单的错误 – William

+0

'maxIndex = a.index(max(a))' –

回答

4

首先,我想你的意思是使用enumerate(a)enumerate(b),为b就是最大浮动。

其次,你也可以这样做:

maxIndex = a.index(b) 
+0

谢谢。这对我很有帮助。 – William

2

max(a)返回单个最高值 - 它不不会返回一个列表(或任何可迭代的)。所以你不能使用枚举。

0

你有一个错字

maxIndex = [i for i, j in enumerate(a) if j == b][0] 
+0

是的,我犯了一个简单的错误。谢谢 – William

1

一行代码:

maxpos = max(enumerate(a), key=lambda p: p[1])[0] 
+1

'maxIndex = a.index(max(a))' –

+0

@ rkhayrov的回答非常好,因为它只迭代列表一次。如果它很大,那可能很重要。 – Blckknght

+0

@Blckknght呃,不是真的。两遍和一遍解决方案仍然是O(N),但是'a.index(max(a))'是对C运行时的两次调用,并且我的解决方案在每次迭代时回调lambda。这是更大的开销。它没有任何优势,至少在数字列表方面。 – rkhayrov