gpt4 book ai didi

python - 删除列表最后一个元素的最有效方法?

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:40 29 4
gpt4 key购买 nike

对于列表:[-1, 0, 43, 128, 32],有几种方法可以删除最后一个元素。

  • list.pop()
  • list = list[:-1](不推荐?)
  • 删除列表[-1]
  • 可能还有更多...

它们都会返回 [-1, 0, 43, 128],但计算强度最小的是什么,它有什么不同吗?我知道像 timeit 这样的模块,我可以用它来自己测试。但我对不受控制的变量持谨慎态度,我的非专业知识肯定会冲淡结果。同样,字符串、 float 或 bool 值的最佳选择是否不同?多维列表呢?

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

不是Difference between del, remove and pop on lists的副本

该问题解释了删除方法之间的差异,但没有解决切片问题。它也根本没有解决速度问题。接受的答案含糊地提到了效率,我认为这是解决方案的一部分,但我看不出它如何适合切片。

最佳答案

Python wiki 中所述.时间复杂度如下:

  • 弹出最后一个 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() 在不指定索引时是最快的。

关于python - 删除列表最后一个元素的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56419072/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com