脚本报错:IndexError: list index out of range
时间:2011-11-29
来源:互联网
Python code
这段代码为什么总是报IndexError: list index out of range啊
调试了一下,发现出错后,j的值是301
但我led(d)值是300,我已经限制range(0,299),为什么j值会超出啊
j=0 d=os.listdir(DBDIR) for j in range(0,len(d)-1): if d[j][-3:] != 'sql': del d[j]
这段代码为什么总是报IndexError: list index out of range啊
调试了一下,发现出错后,j的值是301
但我led(d)值是300,我已经限制range(0,299),为什么j值会超出啊
作者: leewgsheep 发布时间: 2011-11-29
你这种方式来做是会有问题的:
Python code
应该像func2这样或者其它的方式来做
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
length: 9 [1, 2, 3, 4, 5, 6, 7, 8, 9]
length: 8 [1, 3, 4, 5, 6, 7, 8, 9]
length: 7 [1, 3, 5, 6, 7, 8, 9]
length: 6 [1, 3, 5, 7, 8, 9]
length: 5 [1, 3, 5, 7, 9]
####################
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
length: 9 [1, 2, 3, 4, 5, 6, 7, 8, 9]
length: 8 [1, 3, 4, 5, 6, 7, 8, 9]
length: 7 [1, 3, 5, 6, 7, 8, 9]
length: 6 [1, 3, 5, 7, 8, 9]
length: 5 [1, 3, 5, 7, 9]
Traceback (most recent call last):
File "D:\temp\pp\temp.py", line 22, in <module>
func1()
File "D:\temp\pp\temp.py", line 7, in func1
if list1[j]%2==0:
IndexError: list index out of range
Python code
#coding:utf-8 def func1(): list1=range(10) print list1 for j in range(0,len(list1)): if list1[j]%2==0: del list1[j] print 'length:',len(list1),' ',list1 def func2(): list1=range(10) print list1 for j in list1: if j%2==0: list1.remove(j) print 'length:',len(list1),' ',list1 if __name__=='__main__': func2() print '#'*20 func1()
应该像func2这样或者其它的方式来做
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
length: 9 [1, 2, 3, 4, 5, 6, 7, 8, 9]
length: 8 [1, 3, 4, 5, 6, 7, 8, 9]
length: 7 [1, 3, 5, 6, 7, 8, 9]
length: 6 [1, 3, 5, 7, 8, 9]
length: 5 [1, 3, 5, 7, 9]
####################
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
length: 9 [1, 2, 3, 4, 5, 6, 7, 8, 9]
length: 8 [1, 3, 4, 5, 6, 7, 8, 9]
length: 7 [1, 3, 5, 6, 7, 8, 9]
length: 6 [1, 3, 5, 7, 8, 9]
length: 5 [1, 3, 5, 7, 9]
Traceback (most recent call last):
File "D:\temp\pp\temp.py", line 22, in <module>
func1()
File "D:\temp\pp\temp.py", line 7, in func1
if list1[j]%2==0:
IndexError: list index out of range
作者: askandstudy 发布时间: 2011-11-29
用下标嘛,从后头往前循环,这样删除时比较妥当,列表不用从整效率也高些:
for j in range(len(j)-1, -1, -1):
或者改用一个副本做元素循环:
for j in d[:]:
..if j[-3:] != 'sql':
.....d.remove(j)
for j in range(len(j)-1, -1, -1):
或者改用一个副本做元素循环:
for j in d[:]:
..if j[-3:] != 'sql':
.....d.remove(j)
作者: angel_su 发布时间: 2011-11-29
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28