2016-12-14 47 views
0

以下代碼引發了IndexError,任何人都可以解釋爲什麼此代碼的邏輯不起作用?IndexError:列出分配索引超出範圍。

midterms = [90, 80, 89, 87, 97, 100] 
for mark in midterms: 
    newMark = mark + 2 
    midterms[mark] = newMark 
print(midterms) 

回答

3

因爲您使用列表中包含的值作爲索引; mark取值爲90, 80, ..., 100。訂閱midterm[90]顯然是越界了。

要通過項目迭代同時還具有上的位置的把手,python提供enumerate其與當前值一起提供了一個索引:

midterms = [90, 80, 89, 87, 97, 100] 
for ind, mark in enumerate(midterms): 
    newMark = mark + 2 
    midterms[ind] = newMark 
print(midterms) 

這實際上,允許通過列表迭代和改變它毫不費力。

+0

我猜你也可以使用'範圍(LEN(期中考試))'函數。 – Jerrybibo

+0

@Jerrybibo你可能真的不應該。這正是「枚舉」存在的原因。 –

1

如果你是python的新手(我不知道枚舉爲初學者)的另一種想法是使用Jerrybibo的建議。代碼會是這樣的:

midterms = [90, 80, 89, 87, 97, 100] 
for i in range(len(midterms)): 
    newMark = midterms[i] + 2 
    midterms[i] = newMark 
print(midterms) 
0

Jim Fasarakis-Hilliard和我有着同樣的答案。爲你的代碼的另一種解決方法是這樣的:

midterms = [90, 80, 89, 87, 97, 100] 
print [mark+2 for mark in midterms] 

這也將產生

[92, 82, 91, 89, 99, 102]

相關問題