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

目录

Remove list elements in a for loop in Python

  1. 在 Python 的 for 循环中删除列表元素
  2. 在 Python 中迭代时从列表中删除项目

在 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]

我们使用该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() ,它创建了我们可以迭代的列表的浅表副本。

通常,该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

在循环中从列表中删除项目时要注意的最重要的事情for是使用list.copy()方法迭代列表的副本。

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

或者,您可以使用列表理解。

在 Python 中迭代时从列表中删除项目

使用列表理解在迭代时从列表中删除项目,例如
new_list = [item for item in my_list if item > 100]列表理解将返回一个新列表,该列表仅包含与条件匹配的元素。

主程序
# ✅ Remove items from a List while iterating my_list = [77, 105, 123, 88, 199] new_list = [item for item in my_list if item > 100] print(new_list) # 👉️ [105, 123, 199] # --------------------------------------------- # ✅ Remove items from a list while iterating using a for loop for item in my_list.copy(): if item <= 100: my_list.remove(item) print(my_list) # 👉️ [105, 123, 199]

我们使用列表理解在迭代时从列表中删除项目。

列表推导用于对每个元素执行某些操作或选择满足条件的元素子集。

在每次迭代中,我们检查当前项是否大于100并返回结果。

新列表将只包含大于 的值100

示例中的列表理解不会改变原始列表。

如果您需要改变原始列表,请分配给代表整个列表的切片。

要在迭代时从列表中删除项目:

  1. 使用列表理解来遍历列表。
  2. 检查每个元素是否满足条件并返回结果。
  3. 使用列表切片将结果分配给原始列表。
主程序
my_list = [77, 105, 123, 88, 199] my_list[:] = [item for item in my_list if item > 100] print(my_list) # 👉️ [105, 123, 199]

我们使用my_list[:]语法来获取代表整个列表的切片,因此我们可以直接分配给变量。

主程序
my_list = [77, 105, 123, 88, 199] print(my_list[:]) # 👉️ [77, 105, 123, 88, 199]

切片my_list[:]代表整个列表,所以当我们在左侧使用它时,我们正在分配给整个列表。

这种方法改变了原始列表的内容。