在 python 中,我知道如何从列表中删除项目:
item_list = ['item', 5, 'foo', 3.14, True]
item_list.remove('item')
item_list.remove(5)
上面的代码从 item_list
中删除了值 5 和 'item'。
但是当要删除的东西很多时,我必须写很多行:
item_list.remove("something_to_remove")
如果我知道要删除的索引,我会使用:
del item_list[x]
其中 x 是我要删除的项目的索引。
如果我知道要删除的所有数字的索引,我将使用某种循环来del
索引处的项目。
但是如果我不知道要删除的项目的索引怎么办?
我尝试了 item_list.remove('item', 'foo')
,但我收到一条错误消息,提示 remove
只接受一个参数。
有没有办法在单个语句中从列表中删除多个项目?
附:我用过 del
和 remove
。谁能解释一下这两者的区别,还是一样?
最佳答案
在 Python 中,创建一个新对象,例如与 list comprehension通常比修改现有的要好:
item_list = ['item', 5, 'foo', 3.14, True]
item_list = [e for e in item_list if e not in ('item', 5)]
...相当于:
item_list = ['item', 5, 'foo', 3.14, True]
new_list = []
for e in item_list:
if e not in ('item', 5):
new_list.append(e)
item_list = new_list
如果过滤出的值很大(这里,('item', 5)
是一小组元素),使用 set
in
操作更快is O(1) time complexity on average .首先构建要删除的可迭代对象也是一个好主意,这样您就不会在列表理解的每次迭代中都创建它:
unwanted = {'item', 5}
item_list = [e for e in item_list if e not in unwanted]
一个 bloom filter如果内存不便宜,也是一个很好的解决方案。
关于python - 如何在一个语句中从列表中删除多个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36268749/