以下代碼引發了IndexError
,任何人都可以解釋爲什麼此代碼的邏輯不起作用?IndexError:列出分配索引超出範圍。
midterms = [90, 80, 89, 87, 97, 100]
for mark in midterms:
newMark = mark + 2
midterms[mark] = newMark
print(midterms)
以下代碼引發了IndexError
,任何人都可以解釋爲什麼此代碼的邏輯不起作用?IndexError:列出分配索引超出範圍。
midterms = [90, 80, 89, 87, 97, 100]
for mark in midterms:
newMark = mark + 2
midterms[mark] = newMark
print(midterms)
因爲您使用列表中包含的值作爲索引; 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)
這實際上,允許通過列表迭代和改變它毫不費力。
如果你是python的新手(我不知道枚舉爲初學者)的另一種想法是使用Jerrybibo的建議。代碼會是這樣的:
midterms = [90, 80, 89, 87, 97, 100]
for i in range(len(midterms)):
newMark = midterms[i] + 2
midterms[i] = newMark
print(midterms)
Jim Fasarakis-Hilliard和我有着同樣的答案。爲你的代碼的另一種解決方法是這樣的:
midterms = [90, 80, 89, 87, 97, 100]
print [mark+2 for mark in midterms]
這也將產生
[92, 82, 91, 89, 99, 102]
我猜你也可以使用'範圍(LEN(期中考試))'函數。 – Jerrybibo
@Jerrybibo你可能真的不應該。這正是「枚舉」存在的原因。 –