繁体   English   中英

删除列表最后一个元素的最有效方法是什么?

[英]Most efficient way to remove last element of list?

使用列表: [-1, 0, 43, 128, 32] ,有几种方法可以删除最终元素。

  • list.pop()
  • list = list[:-1] (不推荐?)
  • del list[-1]
  • 可能还有几个......

他们都会返回[-1, 0, 43, 128] ,但是计算密集程度最低,是否会产生影响? 我知道像timeit这样的模块,我可以用来为自己测试这个。 但我对不受控制的变量持谨慎态度,而我的非专业知识肯定会削弱结果。 同样,字符串,浮点数或布尔值的最佳选择是否不同? 多维列表怎么样?

我不太确定如何控制和测试这些变量,所以我想我会在这里询问是否存在一般层次结构。

del,删除和弹出列表之间差异不重复

该问题解释了删除方法之间的差异,但没有解决切片问题。 它根本没有解决速度问题。 接受的答案对效率提出了模糊的提及,我可以看到它是解决方案的一部分,但我不知道它如何适合切片。

正如Python wiki中提到的那样。 时间复杂性如下:

  • Pop last O(1)
  • 删除项目O(n)
  • 设置切片O(k+n)

实验研究

import time

all_t = 0.
for i in range(1000):
    list_ = [i for i in range(100000)]
    start_ = time.time()
    list_.pop()
    all_t += time.time() - start_
print("Average Time for POP is {}".format(all_t/1000.))

all_t = 0.
for i in range(1000):
    list_ = [i for i in range(100000)]
    start_ = time.time()
    del list_[-1]
    all_t += time.time() - start_
print("Average Time for DEL is {}".format(all_t/1000.))

all_t = 0.
for i in range(1000):
    list_ = [i for i in range(100000)]
    start_ = time.time()
    list_ = list_[:-1]
    all_t += time.time() - start_
print("Average Time for SLICE is {}".format(all_t/1000.))

结果

Average Time for POP is 7.793903350830078e-07
Average Time for DEL is 9.80854034423828e-07
Average Time for SLICE is 0.0006206443309783935

摘要

如果不指定索引, pop()是最快的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM