在 Python 中从列表中删除多个项目

在 Python 中从列表中删除多个项目

Remove multiple items from a List in Python

要从列表中删除多个项目:

  1. 使用列表理解来遍历列表。
  2. 检查每个项目是否不是要删除的项目之一。
  3. 新列表将不包含任何要删除的元素。
主程序
my_list = ['one', 'two', 'three', 'four', 'five'] elements_to_remove = ['two', 'three'] # ✅ Remove multiple elements from list (list comprehension) new_list = [item for item in my_list if item not in elements_to_remove] print(new_list) # 👉️ ['one', 'four', 'five'] # ------------------------------------------------ # ✅ Remove multiple elements from list (using for loop) my_list = ['one', 'two', 'three', 'four', 'five'] elements_to_remove = ['two', 'three'] for item in my_list.copy(): if item in elements_to_remove: my_list.remove(item) print(my_list) # 👉️ ['one', 'four', 'five'] # ------------------------------------------------ # ✅ Remove multiple elements from list by index (using enumerate) my_list = ['one', 'two', 'three', 'four', 'five'] indexes_to_remove = [1, 2, 3] new_list = [item for idx, item in enumerate( my_list) if idx not in indexes_to_remove] print(new_list) # 👉️ ['one', 'five']

第一个示例使用列表理解从列表中删除多个项目。

列表推导用于对每个元素执行某些操作或选择满足条件的元素子集。
主程序
my_list = ['one', 'two', 'three', 'four', 'five'] elements_to_remove = ['two', 'three'] new_list = [item for item in my_list if item not in elements_to_remove] print(new_list) # 👉️ ['one', 'four', 'five']

在每次迭代中,我们检查当前项目是否不是要删除的项目之一并返回结果。

in 运算符
测试成员资格

例如,如果是 的成员,则
x in l计算为 ,否则计算为TruexlFalse

x not in l返回 的否定x in l
主程序
print(3 not in [1, 2]) # 👉️ True print(3 not in [1, 2, 3]) # 👉️ False

列表理解不会改变原始列表,它会返回一个新列表。

如果要从原始列表中删除项目,请使用for循环。

使用 for 循环从列表中删除多个项目

要从列表中删除多个项目:

  1. 使用for循环迭代列表的副本。
  2. 在每次迭代中,检查当前项目是否是要删除的项目之一。
  3. 使用list.remove()方法移除匹配的元素。
主程序
my_list = ['one', 'two', 'three', 'four', 'five'] elements_to_remove = ['two', 'three'] for item in my_list.copy(): if item in elements_to_remove: my_list.remove(item) print(my_list) # 👉️ ['one', 'four', 'five']

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

这是必要的,因为我们不允许在迭代列表时从列表中删除项目。

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

主程序
my_list = ['one', 'two', 'three', 'four', 'five'] elements_to_remove = ['two', 'three'] for item in my_list.copy(): if item in elements_to_remove: my_list.remove(item) print(my_list) # 👉️ ['one', 'four', 'five']
在每次迭代中,我们检查当前项目是否是要删除的项目之一,并使用该list.remove()方法删除匹配的元素。

list.remove()方法从列表中

删除第一项,其值等于传入的参数。

remove()方法改变原始列表并返回None

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

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

如果需要按索引从列表中删除多个项目,请使用该enumerate()
函数。

使用 enumerate() 从列表中删除多个项目

要从列表中删除多个项目:

  1. 使用列表理解来遍历列表。
  2. 使用枚举函数来访问当前迭代的索引。
  3. 根据索引删除匹配项。
主程序
my_list = ['one', 'two', 'three', 'four', 'five'] indexes_to_remove = [1, 2, 3] new_list = [item for idx, item in enumerate( my_list) if idx not in indexes_to_remove] print(new_list) # 👉️ ['one', 'five']

该示例按索引从列表中删除多个元素。

enumerate函数接受一个可迭代对象并返回一个包含元组的
枚举对象,其中第一个元素是索引,第二个是项目。

主程序
my_list = ['one', 'two', 'three'] for index, item in enumerate(my_list): print(item, index) # 👉️ one 0, two 1, three 2

在每次迭代中,我们使用not in运算符检查当前索引是否不是我们要删除的索引之一并返回结果。

新列表不包含任何指定的索引。

使用列表切片从列表中删除多个项目

使用该del语句从列表中删除多个项目,例如
del my_list[start_index:stop_index]. del语句可用于按索引删除一个或多个列表元素。

主程序
my_list = ['one', 'two', 'three', 'four', 'five'] start_index = my_list.index('two') print(start_index) # 👉️ 1 stop_index = my_list.index('four') print(stop_index) # 👉️ 3 del my_list[start_index:stop_index] print(my_list) # 👉️ ['one', 'four', 'five']

列表切片的语法是my_list[start:stop:step].

start索引是包含的,索引stop是排他的(最多,但不包括)。

Python 索引是从零开始的,因此列表中的第一项的索引为,最后一项的索引为 0-1 len(my_list) - 1

我们在示例中从列表中删除切片时指定了start和索引。end

主程序
my_list = ['one', 'two', 'three', 'four', 'five'] del my_list[1:3] print(my_list) # 👉️ ['one', 'four', 'five']

如果省略start索引,则切片从列表的开头开始。

主程序
my_list = ['one', 'two', 'three', 'four', 'five'] del my_list[:3] print(my_list) # 👉️ ['four', 'five']
请注意,stop索引是排他的。切片上升到,但不包括stop索引。

如果省略stop索引,则切片会到达列表的末尾。

主程序
my_list = ['one', 'two', 'three', 'four', 'five'] del my_list[3:] print(my_list) # 👉️ ['one', 'two', 'three']

负索引可用于向后计数,例如my_list[-1]返回列表中的最后一项并my_list[-2]返回倒数第二项。

主程序
my_list = ['one', 'two', 'three', 'four', 'five'] del my_list[2:-1] print(my_list) # 👉️ ['one', 'two', 'five']

索引是独占的stop,因此列表切片上升到但不包括列表中的最后一项。

您还可以step在从列表中删除切片时指定 a。

主程序
my_list = ['one', 'two', 'three', 'four', 'five'] del my_list[::2] print(my_list) # 👉️ ['two', 'four']

该示例删除从 index 开始的每隔一个元素0

发表评论