python在循环中删除列表的坑

python在循环中删除列表的坑

alist = [2,4,5,6,7]
for var in alist:
 if var %2 ==0:
  alist.remove(var)
print(alist)
#结果为#[4,5,7]

我们本来想删除2,4,6这三个元素,结果4没有被删除掉,研究了很久,原来,for循环在遍历列表时,不是按照值来遍历的,而是按照索引来遍历的,当我们删除了2之后,此时我们的index值指向1,而此时的列表已经变成[4,5,6,7],alist[1] =5 ,所以会跳过4这个值

l1 = [1,2,3,4,5,6]
for i in l1:
	if i ==2:
		l1.remove(i)
	print(i)
print(l1)	
#1
#2
#4
#5
#6
#[1, 3, 4, 5, 6]

第1次: i -> l1[0] ->1 print 1
第2次: i -> l1[1]–当i= 2时,i = 2 , 但此时列表被改变列表中的2被删除, l1 [1]-> 3
第3次: i -> l1[2] ->4
第4次: i -> l1[3]->5
第5次: i -> l1[4] ->6
第6次: i -> l1[5] ->7
所以我们上面输出的 i 没有3
所以,尽量不要在循环时改变列表的大小,
如果非要改变:
1、切片

l1 = [1,2,3,4,5]
for i in l1[:]
	l1.remove(i)

2、倒着删

l1 = [1,2,3,4,5]
for i in range(len(l1-1),-1,-1):
	l1.remove(i)

3、列表推导式

l1 = [1,2,3,4,5]
l2 = [i for i in l1]
for i in l2:
	l1.remove(i)

4、内置函数map

l1 = [1,2,3,4,5]
l2 = list(map(lambda a:a,l1)) #此处一定要先转化成list
for i in l2:
	l1.remove(i)

你可能感兴趣的:(python在循环中删除列表的坑)