python - 删除列表最后一个元素的最有效方法?
问题描述
使用 list: [-1, 0, 43, 128, 32]
,有几种方法可以删除最终元素。
list.pop()
list = list[:-1]
(不建议?)del list[-1]
- 可能还有更多...
他们都会返回[-1, 0, 43, 128]
,但是什么是计算密集度最低的,它有什么不同吗?我知道timeit
我可以用来自己测试的模块。但我对不受控制的变量保持警惕,我的非专业知识肯定会削弱结果。同样,字符串、浮点数或布尔值的最佳选择是否不同?多维列表呢?
我不太确定如何控制和测试这些变量,所以我想我会在这里询问是否存在一般层次结构。
列表中的删除、删除和弹出之间的差异不是重复的
该问题解释了删除方法之间的差异,但没有解决切片问题。它也根本没有解决速度问题。接受的答案模糊地提到了效率,我可以看到它是解决方案的一部分,但我看不出它如何适合切片。
解决方案
正如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()
不指定索引时最快。
推荐阅读
- php - 使用相同的样式设置显示的文本看起来不同
- html - 引导表单给出 html 验证错误
- python - 在 Windows 上安装 Python + Numpy 和 Matplotlib 库需要多少空间?
- python - Pandas dropna() 不工作(这绝对不是常见的原因!)
- java - Spring Batch Crud 数据库
- javascript - Vue 可观察数组在页面刷新时丢失
- c# - 如何根据导航属性 EFCore 执行过滤
- html - 将页面上的联系表单与并排文本和输入字段居中对齐?[更新]
- kotlin - 如何理解 Kotlin `ClosedFloatingPointRange`?
- sql - SQL中的索引匹配