以下代码引发了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你可能真的不应该。这正是“枚举”存在的原因。 –