python中迭代问题

迭代list的时候不能修改这个list,否则,可能会出错。

numbers=[1,0,3,5,0]
numbers.sort()
print(numbers)
print('*************')
for i in numbers:
    print(i)
    if (i<5): #如果i是5,则弹出
        numbers.pop(0)
    else:
        break
    print(numbers)

输出为:

[0, 0, 1, 3, 5]
*************
0
[0, 1, 3, 5]
1
[1, 3, 5]
5

原因是,我们的numbers在弹出后改变了,而i却在每一次迭代中位置下移,所以我们输出的内容会有变化。

修改:

numbers=[1,0,3,5,0]
numbers.sort()
result=numbers#复制到result中
print(numbers)
print('*************')
for i in numbers:
    print(i)
    if (i<5): #如果i是5,则弹出
        result.pop(0)
    else:
        break
    print(numbers)

输出:

[0, 0, 1, 3, 5]
*************
0
[0, 1, 3, 5]
1
[1, 3, 5]
5

依然出错,因为我们虽然复制了一个,实际上,那是引用而已。

再次修改:

numbers=[1,0,3,5,0]
numbers.sort()
result=[i for i in numbers]#复制到result中
print(numbers)
print('*************')
for i in numbers:
    print(i)
    if (i<5): #如果i是5,则弹出
        result.pop(0)
    else:
        break
    print(numbers)

输出:

[0, 0, 1, 3, 5]
*************
0
[0, 0, 1, 3, 5]
0
[0, 0, 1, 3, 5]
1
[0, 0, 1, 3, 5]
3
[0, 0, 1, 3, 5]
5

这样就没有问题了。

原文地址:https://www.cnblogs.com/shixisheng/p/7390618.html