首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IndexError:分配列表和索引超出了范围。

IndexError:分配列表和索引超出了范围。
EN

Stack Overflow用户
提问于 2016-12-14 09:21:23
回答 3查看 565关注 0票数 0

下面的代码引发了一个IndexError,谁能解释一下为什么这段代码的逻辑不起作用?

代码语言:javascript
复制
midterms = [90, 80, 89, 87, 97, 100]
for mark in midterms:
    newMark = mark + 2
    midterms[mark] = newMark
print(midterms)
EN

回答 3

Stack Overflow用户

发布于 2016-12-14 09:24:14

因为您使用列表中包含的值作为索引,所以mark采用值90, 80, ..., 100。订阅midterm[90]显然是越界的。

为了在遍历条目的同时获得位置的句柄,Python提供了enumerate,它提供了一个索引和当前值:

代码语言:javascript
复制
midterms = [90, 80, 89, 87, 97, 100]
for ind, mark in enumerate(midterms):
    newMark = mark + 2
    midterms[ind] = newMark
print(midterms)

实际上,这允许遍历列表并毫不费力地更改它。

票数 3
EN

Stack Overflow用户

发布于 2016-12-14 09:33:19

如果您是python新手(作为初学者,我不知道enumerate ),另一种考虑此问题的方法是使用Jerrybibo的建议。这样的代码如下所示:

代码语言:javascript
复制
midterms = [90, 80, 89, 87, 97, 100]
for i in range(len(midterms)):
    newMark = midterms[i] + 2
    midterms[i] = newMark
print(midterms)
票数 1
EN

Stack Overflow用户

发布于 2016-12-14 10:23:19

Jim Fasarakis-Hilliard和我的答案是一样的。代码的另一个解决方法是:

代码语言:javascript
复制
midterms = [90, 80, 89, 87, 97, 100]
print [mark+2 for mark in midterms]

它也会产生

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

python

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41133288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档