目标是想从list中删除特定类别的元素,但是发现用for循环删除后,有部分删掉了,还有部分剩下了
代码如下:
list1=['a.txt','b.txt','c.txt','a.jpg','b.jpg','c.jpg']
for im in list1:
if im.split('.')[-1] != 'jpg':
list1.remove(im)
print(list1)
输出结果:
['b.txt', 'a.jpg', 'b.jpg', 'c.jpg']
会发现,b.txt
这个元素并没有被删掉,研究了一下输入输出发现:
- 就是因为remove会立刻改变list的排序,所以连号的元素没有被删除
- 因为list的大小变了,但是索引的号却没有更新,所以就会出现跳过的现象
改正也很简单,只要在for
循环时的list
后面加上[:]
即可,修改后的代码如下:
list1=['a.txt','b.txt','c.txt','a.jpg','b.jpg','c.jpg']
for im in list1[:]:
if im.split('.')[-1] != 'jpg':
list1.remove(im)
print(list1)
此时输出:
['a.jpg', 'b.jpg', 'c.jpg']