首页 > > > python基础篇-循环删除列表
python基础篇-循环删除列表
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) # []
注意: 由于删除元素会导致元素的索引改变, 所以容易出现问题. 尽量不要在循环中直接去删除元素. 可以把要删除的元素添加到另⼀个集合中然后再批量删除.
Python程序员不动否
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4729/viewspace-3163640/ ,如需转载,请注明出处,否则将追究法律责任。