for item in items:这样就可以根据下标来循环一个列表,并且用将列表中的数据用item来命名
举个简单的例子:
lst = [1, 2, 3, 4, 5]
for item in lst:
print(item, end='')
输出的结果就是12345,完成了列表的遍历,并输出了每一个数据。
利用for循环删除某一种数字假设有个lst列表[1,2,3,2,5,2,6],我们想要删除列表里面所有的2
lst = [1, 2, 3, 2, 5, 2, 6]
for i in lst:
if i == 2:
lst.remove(i)
print(lst)
#输出的结果为[1,3,5,6]
看着是不是很简单,但是注意了,如果我们的列表是[1,2,2,3,5,6]这样的
lst = [1, 2, 2, 3, 5, 6]
for i in lst:
if i == 2:
lst.remove(i)
print(lst)
# 输出的结果为[1,2,3,5,6]
我们可以看到,有个2没有被删除掉。
想搞清楚这是为什么,我们就先来了解一下for循环的原理,在for循环中遍历列表,是通过下标来实现的,也就是说第一次是把下标为0的数字赋值给i,第二次是把下标为1的数字赋值给i,一次类推,那么假设当我们对下标为2的数据进行了删除操作时,python就会自动把后面的下标为3,4,5的数据给前移,也就是说下标为3的数字的下标变成了2,那么在下一次for循环选取数据的时候,就会选取下标为3的数据,也就是选到了原来下标为4的那个数字,而原本下标为3的数字就会被忽略掉,也就是说我们删除了一个数据之后,这个数据的下一个数据就会移动到这数据的位置,导致下一个数据被忽略掉。
想要解决这个问题,最简单的办法就是创建一个新的列表来接收lst,然后遍历新的列表,达到删除lst列表里的元素的目的,在这里有一个误区,我们都知道列表可以通过赋值操作来完成,所以可能会想到用赋值操作来创建一个新列表,如
lst = [1, 2, 2, 3, 5, 6] lst2 = lst print(lst2) # 输出的结果是[1,2,2,3,5,6]
注意,虽然lst2和lst里的数据相等,但是在上一篇文章切片操作中,我们说到,将列表赋值给新列表之后,新列表的地址和原本列表地址是相同的,所以当原来列表里的元素被删除时,新列表的元素也会同步被删除,所以上述问题依然存在。
lst = [1, 2, 2, 3, 5, 6]
lst2 = lst
for i in lst2:
if i == 2:
lst.remove(i)
print(lst)
# 输出的结果是[1,2,3,5,6]
可以清楚的看到,2并没有被删除干净,上述问题依然存在。
所以这里就要用到切片操作了,在切片操作中我们说到,我们通过切片之后的列表不是原本的列表,而是一个新的列表,这个列表的地址已经不再是原本列表的地址了,所以修改原列表的时候就不会牵扯到新列表了,上述的问题就能得到完美的解决。
lst = [1, 2, 2, 3, 5, 6]
lst2 = lst[:]
for i in lst2:
if i == 2:
lst.remove(i)
print(lst)
# 输出的结果是[1,3,5,6]
这样,我们就得到了我们想要的结果(想要一个一个遍历删除整个列表中的元素也同样用这个方法)。



