牛骨文教育服务平台(让学习变的简单)
博文笔记

Python用for循环来遍历list时,for循环体内有改动list长度的操作的情况

创建时间:2016-07-31 投稿人: 浏览次数:6578

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]

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。