python - 如何在一个语句中从列表中删除多个项目?

标签 python list list-comprehension

在 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 只接受一个参数。

有没有办法在单个语句中从列表中删除多个项目?

附:我用过 delremove。谁能解释一下这两者的区别,还是一样?

最佳答案

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

相关文章:

python - list.index() 是否实现缓存

python - 使用 zip 将元组按顺序附加到列表内的列表的更好方法

python - 自动简化/重构 Python 代码(例如 for 循环 -> 列表理解)?

haskell - 在 Haskell 中获取列表最后一个元素的最快方法

python - setup.py - 在 setuptools 中的包内添加数据文件

python - Tensorflow 安装和导入正确,但在尝试使用时抛出异常

python - Django如何发送GET请求

python - 在Python中的递归coi函数中返回一个列表

python - 如何读取Python cplex api中的变量值?

list - 错误:在此小部件上方找不到正确的提供程序<List <Auftrag >>