Python提供了多种删除列表元素的方法:remove()、pop()和del运算符。每种方法都有其细微差别。选择哪个方法取决于是否需要按值或索引删除元素,获取已删除的值,或仅仅是删除元素。
在remove()、pop()和del之间的混淆常常导致错误:选择错误的方法可能引发异常或删除错误的元素。同样重要的是了解返回值的处理以及各种方法对列表中缺少元素的反应。
remove(x) 删除第一个找到的值为x的元素 — 如果不存在则抛出ValueErrorpop([i]) 删除并返回索引为i的元素(如果没有索引则返回最后一个元素)。如果索引超出范围 — 抛出IndexErrordel list[i] 根据索引删除元素而不返回值。可以删除切片(del list[i:j])代码示例:
lst = [10, 20, 30, 20] lst.remove(20) # [10, 30, 20] lst.pop(1) # 删除30, [10, 20] del lst[0] # [20]
关键特性:
如果对列表中没有的值调用remove(),会发生什么?
会引发ValueError:
lst = [1, 2] lst.remove(5) # ValueError: list.remove(x): x not in list
如何获取刚从列表中删除的元素?
只有pop返回已删除的元素。
lst = [7, 8, 9] x = lst.pop() # x = 9
可以使用del按值删除吗?
不可以,del只能按索引或切片工作。按值只能用remove。
负面案例 程序员通过range(len(lst))写循环,通过del删除元素——索引失效,元素被跳过。 优点: 对初学者来说简单直接和“符合逻辑” 缺点: 容易出现意外行为——某些元素未被删除,列表的行为不如预期。 正面案例 在按值删除之前进行检查,仅在索引有保障时使用pop,按索引删除的顺序反向进行。 优点: 代码抗错,元素没有被跳过 缺点: 有时代码稍微长一点,但透明且安全。