有没有比这更快的去除零的方法:

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/

10-12 21:43