错误的删除方式
-
del var_namelist_a = [1, 2, 3, 4] for index, item in enumerate(list_a): del item print(list_a) # [1, 2, 3, 4]del删除的只是变量,而不是数据,因此数组list_a内容不变 -
remove&poplist_a = [1, 2, 3, 4] for index, item in enumerate(list_a): list_a.remove(item) print(list_a) # [2, 4]list_a = [1, 2, 3, 4] for index, item in enumerate(list_a): del_item = list_a.pop(index) print(del_item) print(list_a) ''' output: 1 3 [2, 4] '''a.
remove会删除第一个匹配到的指定值, 而不是特定的索引, 如果找不到值则抛出 ValueError 异常
b.pop则会删除指定索引处的元素并返回它, 如果指定了无效的索引则抛出 IndexError 异常
c. 为什么会输出[2, 4]?
1. 列表迭代时按照索引进行的,当我们删除1时, 列表内容变成[2,3,4], 索引下标从 0 -> 1
2. 第二次删除元素,就取下标为1的元素3, 索引下标变为2,列表内容[2,4]
3. 第三次删除元素,取下标为2的元素,下标为2的元素已为空,因此无法删除
正确的删除方式
list_a = [1, 2, 3, 4]
for index, item in enumerate(list_a[:]):
list_a.remove(item)
print(list_a) # []
list_a[:] python为切片列表创建了新对象, 迭代副本
本文深入探讨了Python中处理列表删除的常见错误及正确实践,对比了del、remove与pop方法的区别,解释了它们在迭代过程中的行为差异,并提供了解决方案。
2874

被折叠的 条评论
为什么被折叠?



