在 Python 中从列表中删除多个项目
Remove multiple items from a List in Python
要从列表中删除多个项目:
- 使用列表理解来遍历列表。
- 检查每个项目是否不是要删除的项目之一。
- 新列表将不包含任何要删除的元素。
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
计算为 ,否则计算为。True
x
l
False
x not in l
返回 的否定x in l
。print(3 not in [1, 2]) # 👉️ True print(3 not in [1, 2, 3]) # 👉️ False
列表理解不会改变原始列表,它会返回一个新列表。
如果要从原始列表中删除项目,请使用for
循环。
使用 for 循环从列表中删除多个项目
要从列表中删除多个项目:
- 使用
for
循环迭代列表的副本。 - 在每次迭代中,检查当前项目是否是要删除的项目之一。
- 使用
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() 从列表中删除多个项目
要从列表中删除多个项目:
- 使用列表理解来遍历列表。
- 使用枚举函数来访问当前迭代的索引。
- 根据索引删除匹配项。
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
是排他的(最多,但不包括)。
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
。