python-3.x - 为什么列表索引超出范围但似乎没问题
问题描述
为什么在尝试运行此代码时出现“列表索引超出范围”
x = 20
l = [[] for i in range(0, x)]
for m in range(x):
for i in range(len(l)):
if i != len(l):
l[i+1].append(m)
解决方案
for i in range(len(l)):
产生包容0
。len(l) - 1
所以i
永远不等于len(l)
,但是当它等于 时len(l) - 1
,l[i + 1]
试图访问l[len(l)]
比l
(alist
的索引从0
(包括) 到其长度 (不包括)) 中的最高合法索引多一个,所以长度本身永远不是 a有效索引)。
您的测试应该是if i != len(l) - 1:
排除i + 1
不是合法索引的情况。或者更简单(并且更有效),只需range
首先限制,这样您就不需要像当前代码那样添加1
和直接跳过索引:0
for m in range(x):
for i in range(1, len(l)):
l[i].append(m)
请注意,在这种特定情况下,您可以l
使用以下方式构建决赛:
l = [[]] + [list(range(20)) for _ in range(1, x)]
或者没有可能过于密集的 listcomp:
l = [[]]
for _ in range(1, x):
l.append(list(range(20)))
因为这就是您的代码以某种迂回的方式所做的事情。
推荐阅读
- c# - 插入实体框架后启动应用程序出错
- cuda - cuDevicePrimaryCtxReset() 和 cudaDeviceReset() 做同样的事情吗?
- python - 在虚拟环境中使用 pip 安装 Flask-MySQLdb 时出错
- node.js - Socket.io + 节点 JS = 握手期间出错:错误代码 500
- python - 在 Django 频道中提交消息时如何显示时间戳
- testing - TestCafe 开源可以运行TestCafe studio 中编写的测试用例吗?
- sql - 必须声明标量变量 - 即使定义了该变量(Q&A)
- javascript - 如何在 React 中使用 JavaScript 从数组中删除对象元素
- docker - 在 Windows 10 上的 docker 中运行具有多个节点的 couchbase 集群
- python - 使此代码针对多个 excel 文件运行