Python用for循环来遍历list时,for循环体内有改动list长度的操作的情况
Python用for循环来遍历list时,for循环体内有改动list长度的操作的情况
例子:
#Python 3.4.3
list1 = [i for i in range(0, 10)]
for j in range(0, len(list1)):
if list1[j] % 2 == 0: #如果list1[j]是一个偶数
del list1[j] #那就删除list1[j]
print (list1)
注意,lists
这个list
变量在for循环进行的过程中,会被删除一部分元素(偶数),也就是说,在for循环结束之前len(lists)的值是会变化的。那结果会是什么呢?
Traceback (most recent call last):
File "<pyshell#25>", line 2, in <module>
if list1[j] % 2 == 0:
IndexError: list index out of range
超出范围了,看来for循环并没有意识到len(lists)的值发生了变化,在删除了一部分数之后,它还以为lists的长度是10。
我们不妨试试稍微改一下程序:
list1 = [i for i in range(0, 10)]
lenth = len(list1) #我们把lists的长度用一个变量表示
for j in range(0, lenth):
if lists[j] % 2 == 0:
del lists[j]
这时候for循环的范围是从0到变量lenth的值。输出如下:
[1, 3, 5, 7, 9]
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 增强for循环
- 下一篇: SpringMVC对输入表单校验