2014-05-09 119 views
0
a = (3,4,11,12,5,2,7,8,6,9,10) 
for i in range(len(a)): 
    b = a[i] 
    for x in range(2,15): 
    if b > x: 
     c = i 
print(c) 

結果索引中的最大元素在元組

>>> 
10 
>>> 

在上述例子中,我試圖由每個元件對一個特定的範圍進行比較,以提取從元組中的最大元素(2-14 )。

上述例子的結果應該是3(12指數),但我得到10

誰能告訴我什麼是錯的代碼

回答

0

你得到10的結果,因爲你元組有11個元件和最後的索引是10。

您在第二循環該指數等於設置爲c

for x in range(2,15): 
    if b > x: 
     c = i 

因爲10我s是循環的元組的最後一個值,並且b > x對於b = 10至少有一次爲真,c被賦予10(即10)的索引,並且最後打印的是該值。


你會如何解決這個問題呢?

我會做這樣的事情:

a = (3,4,11,12,5,2,7,8,6,9,10) 
c = 0 
for i in range(len(a)): 
    if a[i] in range(2, 15) and a[i] > a[c]: 
     c = i 
print(c) 

這將打印3

它只是遍歷元組,檢查當前值的範圍是2-15,如果該值大於以前的最高值,如果兩者真它設置爲當前指數作爲新c

輸出:

+0

我想一個特定的範圍(2-14)內定位的元組的最大元素的索引。如果我的代碼正常工作c將是3(12的索引) – user3454234

+0

@ user3454234是的,但是你的代碼無法正常工作,我解釋了原因,因爲那是你的問題:-) –

+0

你會如何解決問題? – user3454234

0

您的代碼只是傳遞最後一個元素的索引,它放置在您定義的範圍內(實際上是在索引10處)。

你需要存儲局部最大和反對它比較每個新元素(而不是使用範圍(2,15)。

我不是蟒蛇是familar,但得到的指數最大的元素,這可能是一個解決方案:?

a = (3,4,11,12,5,2,7,8,6,9,10) 
localMaximum = 0 

for i in range(len(a)): 

    b = a[i] 

    if b>localMaximum: 
     localMaximum = b 
     c = i 

print(c) 
+0

在Python中,indendation是至關重要的,您是否介意編輯您的代碼塊以使它具有正確的縮進(4)? –

2

爲什麼要使用在所有循環

a = (3,4,11,12,5,2,7,8,6,9,10) 
print(a.index(max(a))) 

如果您正在尋找2個指數之間在特定範圍的局部最大

startindex, endindex = 2, 14 
b = a[startindex : endindex] 
print(b.index(max(b)) + startindex) 

如果範圍爲2至14你的意思是在元組,而不是指數範圍值那麼這對我的作品。它會打印首次出現的索引。

a = (3,4,11,12,5,2,7,8,6,9,10) 
subsetTuple = tuple(item for item in a if item in range(2,14)) 
print(a.index(max(subsetTuple))) 

或者你也可以做到在同一行

a = (3,4,11,12,5,2,7,8,6,9,10) 
print(max(enumerate(a), key = lambda pair: pair[1] if pair[1] in range(2, 14) else False)[0]) 
+0

2-14範圍呢? –

+0

我剛剛編輯我的答案 – dwalsh84

+1

更好的辦法是使用'enumerate'來獲得索引,而不必迭代集合兩次,例如'index,value = max(enumerate(a),key = lambda pair:pair [1])' – xmo