先来看一段代码:
list = [11, 22, 33, 44] for li in list: list.remove(li) print(list) # [22, 44]
为什么会是这样的结果?
我们想的可能是每一次循环遍历就删除正在循环的那个元素,最后的结果就是一个空列表。
那for循环内部到底干了什么呢?
for的运?过程. 会有?个指针来记录当前循环的元素是哪?个, ?开始这个指针指向第0个. 然后获取到第0个元素. 紧接着删除第0个. 这个时候. 原来是第?个的元素会?动的变成第0个. 然后指针向后移动?次, 指向1元素. 这时原来的1已经变成了0, 也就不会被删除了.
那pop和del可不可以呢?
list = [11, 22, 33, 44] for li in list: list.pop() print(list) # [11, 22] list = [11, 22, 33, 44] for li in list: del list[li] print(list) # 报错IndexError: list assignment index out of range
答案是否定的。
那到底怎样循环删除列表呢?
# 方式一
list = [11, 22, 33, 44]
for i in range(0, len(list)):
list.pop()
print(list) # []
# 方式二
list = [11, 22, 33, 44]
new_list = []
for li in list:
new_list.append(li)
for li in new_list:
list.remove(li)
print(list) # []
注意: 由于删除元素会导致元素的索引改变, 所以容易出现问题. 尽量不要在循环中直接去删除元素. 可以把要删除的元素添加到另?个集合中然后再批量删除.