2012-08-30 55 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