在python中,我知道如何从列表中删除项目.
item_list = ['item', 5, 'foo', 3.14, True]
item_list.remove('item')
item_list.remove(5)
Run Code Online (Sandbox Code Playgroud)
上面的代码从item_list中删除了值5和'item'.但是当有很多东西需要删除时,我必须编写很多行
item_list.remove("something_to_remove")
Run Code Online (Sandbox Code Playgroud)
如果我知道我要删除的索引,我使用:
del item_list[x]
Run Code Online (Sandbox Code Playgroud)
其中x是我要删除的项目的索引.
如果我知道要删除的所有数字的索引,我将使用某种循环来del处理索引处的项目.
但是,如果我不知道要删除的项目的索引怎么办?
我试过item_list.remove('item', 'foo'),但是我得到一个错误,说remove只需要一个参数.
有没有办法从单个语句中的列表中删除多个项目?
PS我用过del和remove.有人可以解释这两者之间的区别,还是一样?
谢谢
alu*_*iak 121
在Python中,创建新对象通常比修改现有对象更好:
item_list = ['item', 5, 'foo', 3.14, True]
item_list = [e for e in item_list if e not in ('item', 5)]
Run Code Online (Sandbox Code Playgroud)
这相当于:
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
Run Code Online (Sandbox Code Playgroud)
如果有大量筛选出的值(这里('item', 5)是一小部分元素),使用a set可以提高性能,因为in操作在O(1)中:
item_list = [e for e in item_list if e not in {'item', 5}]
Run Code Online (Sandbox Code Playgroud)
需要注意的是,在解释意见,并建议在这里,下面可以节省更多的时间,避免了一组在每个循环就可以了:
unwanted = {'item', 5}
item_list = [e for e in item_list if e not in unwanted]
Run Code Online (Sandbox Code Playgroud)
一个布隆过滤器也是一个不错的解决方案,如果内存是不便宜.
Aak*_*oel 20
item_list = ['item', 5, 'foo', 3.14, True]
list_to_remove=['item', 5, 'foo']
Run Code Online (Sandbox Code Playgroud)
删除后的最终列表应如下
final_list=[3.14, True]
Run Code Online (Sandbox Code Playgroud)
单线代码
final_list= list(set(item_list).difference(set(list_to_remove)))
Run Code Online (Sandbox Code Playgroud)
输出如下
final_list=[3.14, True]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
122207 次 |
| 最近记录: |