l=[1,1,1,2,3,4,5]
for i in l:
if i%2!=0:
l.remove(i)
print(l)
循环的时候还是采用下标循环,remove删除元素
i=1 l.remove(1)=1 l=[X,1,1,2,3,4,5]
i=1,l.remove(1)=1 l=[X,1,X,2,3,4,5]
i=3, l.remove(3)=3 l=[X,1,X,2,X4,5]
i=5,l.remove(4)=5 l=[X,1X,2,X,4]
这种循环的list容易导致删错错乱
如果`再增加一个l1则会出现另外一种情况删除元素为基数的元素
l=[1,1,1,2,3,4,5]
l1=[1,1,1,2,3,4,5]
for i in l1:
if i%2!=0:
l.remove(i)
print(l)
l=[1,1,1,2,3,4,5]
# 0,1,2,3,4,5,6
l1=l
for i in l1:
if i%2!=0:
l.remove(i)
print(l)
l1=l是一种浅拷贝,实际数据内存地址还是指向l对应的数据内存地址
以上3这种情况,看似一样,实则差别很大。可以用print(id(l))来查看内存地址会发现第二种方式内存地址不一样。
还存在一种深拷贝(内存地址会改变):
import copy
l=[1,1,1,2,3,4,5]
# 0,1,2,3,4,5,6
l1=copy.deepcopy(l)
for i in l1:
if i%2!=0:
l.remove(i)
print(l)
print(id(l))
print(id(l1))
列表循环式:
res=[i for i in range(10)]
res=[str(i).zfill(2) for i in range(1,34)]