2016-12-14 65 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]

相关问题