有没有比这更快的去除零的方法:
while L[-1] == 0:
L.pop(-1)
任何预建的功能或类似的东西?
最佳答案
三种可能的微优化:
1. 当您只想按索引删除项目时,请使用 del my_list[index]
而不是 mylist.pop(index)
。
它稍微快一点:
import dis
def del_by_pop(mylist):
mylist.pop(-1)
def del_by_del(mylist):
del mylist[-1]
使用
dis
module 我们可以看看下面发生了什么。dis.dis(del_by_pop)
打印以下内容: 2 0 LOAD_FAST 0 (mylist)
3 LOAD_ATTR 0 (pop)
6 LOAD_CONST 2 (-1)
9 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
12 POP_TOP
13 LOAD_CONST 0 (None)
16 RETURN_VALUE
dis.dis(del_by_del)
打印以下内容: 2 0 LOAD_FAST 0 (mylist)
3 LOAD_CONST 2 (-1)
6 DELETE_SUBSCR
7 LOAD_CONST 0 (None)
10 RETURN_VALUE
del
要做的工作较少,因为它不需要返回弹出的项目。2. 使用 for 循环而不是 while 循环。
def del_for(mylist):
for i in reversed(mylist):
if not i:
del mylist[-1]
else:
break
3. 根本不要使用
del
,只要找到最后一个非零项的位置就对列表进行切片 def del_for(mylist):
for i, j in enumerate(reversed(mylist)):
if j:
mylist = mylist[:-1*i]
break
关于python - 删除 Python 列表中的所有尾随零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29572371/