当前位置: 首页 > 面试题库 >

仅需一条语句即可从Python列表中删除多个项目

吕钧
2023-03-14
问题内容

在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只需要一个参数

有没有一种方法可以在单个语句中从列表中删除多个项目?

PS我已经使用delremove。有人可以解释这两者之间的区别还是相同?

谢谢


问题答案:

在Python中,创建新对象通常比修改现有对象要好:

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)是一小组元素),则使用aset会更快,因为该in操作的平均时间复杂度为O(1)。最好先构建要删除的可迭代对象,这样就不必在列表理解的每次迭代中都创建它:

unwanted = {'item', 5}
item_list = [e for e in item_list if e not in unwanted]

一个布隆过滤器也是一个不错的解决方案,如果内存是不便宜。



 类似资料:
  • 问题内容: 我在Python中有一个列表列表: 我想从中删除重复的元素。如果这是正常列表,而不是我可以使用的列表set。但不幸的是,该列表不可散列,因此无法建立一组列表。只有元组。因此,我可以将所有列表转换为元组,然后使用set并返回列表。但这不是很快。 如何以最有效的方式做到这一点? 上面的结果应为: 我不在乎保留订单。 注意:这个问题很相似,但不是我所需要的。搜索了SO,但没有找到确切的重复项

  • 问题内容: 我有表,我想将它做成。我该怎么办? 问题答案: Python清单 list.pop(索引) 删除列表[索引] 这些都将修改您的原始列表。 其他人建议使用切片: 复制清单 可以返回一个子集 另外,如果要执行许多pop(0),则应查看collections.deque 从列表的左端提供更高的性能

  • 问题内容: 在遍历列表时,我想根据条件删除列表中的项。请参见下面的代码。 这给了我一个例外。 如何才能做到这一点? 问题答案: 您需要使用和调用上,而不是使用循环。

  • 问题内容: 如果想基于每个嵌套列表的第一个元素评估重复项,谁能提出一个好的解决方案从嵌套列表中删除重复项? 主列表如下所示: 如果已经在第一位置出现了另一个具有相同元素的列表,那么我想删除该列表并得到以下结果: 您可以建议一种算法来实现此目标吗? 问题答案: 您是否关心保留订单/删除了哪些重复项?如果不是,则: 会做的。如果您想保留订单并想保留第一个订单,则:

  • 我正在从远程数据库读取一组行,从本地数据库读取一组类似的行,然后使用RemoveAll删除本地已经存在的远程行。。。 但这对我来说似乎不对。当我真正需要做的只是检查是否存在匹配项时,我认为我不应该计算事物。我尝试了和的各种用法,但得到了废话。我不能使用(如这里建议的),因为列表元素不是同一类型。 有更好的方法吗?