迭代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
这样就没有问题了。