ITPub博客

首页 > > > python基础篇-循环删除列表

python基础篇-循环删除列表

作者:youou 时间:2019-10-09 11:04:00 0 删除 编辑

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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-07-17

  • 博文量
    294
  • 访问量
    13384