Python 的 for 循环中删除列表元素

在 for 循环中删除列表元素:

  1. 使用 for 循环遍历列表的副本。
  2. 检查每个项目是否满足条件。
  3. 使用 list.remove() 方法删除满足条件的项目。
my_list = [22, 33, 66, 77, 99]

for item in my_list.copy():
    if item < 50:
        my_list.remove(item)

print(my_list)  # 👉️ [66, 77, 99]

Python 的 for 循环中删除列表元素

我们使用 list.copy() 方法来获取列表的副本。

my_list = [22, 33, 66, 77, 99]

print(my_list.copy())  # 👉️ [22, 33, 66, 77, 99]

list.copy() 方法返回调用该方法的对象的浅表副本。

但是,我们可以遍历列表的副本并从原始列表中删除项目。

my_list = [22, 33, 66, 77, 99]

for item in my_list.copy():
    if item < 50:
        my_list.remove(item)

print(my_list)  # 👉️ [66, 77, 99]

在 for 循环的每次迭代中,我们检查当前项是否小于 50,并删除满足条件的元素。

我们可能还会看到使用 my_list[:] 语法通过使用列表切片来获取列表的浅表副本的示例。

my_list = [22, 33, 66, 77, 99]

for item in my_list[:]:
    if item < 50:
        my_list.remove(item)

print(my_list)  # 👉️ [66, 77, 99]

我们使用 my_list[:] 语法来获取代表整个列表的切片。

my_list = [22, 33, 66, 77, 99]

print(my_list[:])  # 👉️ [22, 33, 66, 77, 99]

一般来说,list.copy() 方法比使用表示整个列表的切片更具可读性。

这是另一个例子。

my_list = [None, 22, 33, None, 66, 77, None, 99]

for item in my_list.copy():
    if item is None:
        my_list.remove(item)

print(my_list)  # 👉️ [22, 33, 66, 77, 99]

我们使用 for 循环在迭代列表时从列表中删除所有 None 值。

如果我们尝试遍历原始列表并从中删除项目,我们可能会遇到难以定位的错误。