python - 比较两种获取子列表长度的方法

标签 python

我有两种获取子列表长度的实现。存在显着的性能差异。我想知道为什么。

import time

# list with 100000 integers
with open('IntegerArray.txt') as f:
    input_list = [int(x) for x in f.read().splitlines()]

i = 50000

start_1 = time.time()
len(input_list[i:])
print("--- %s seconds --- " % (time.time() - start_1))

start_2 = time.time()
len(input_list) -i
print("--- %s seconds --- " % (time.time() - start_2))

输出:

--- 0.000550985336304 seconds ---
--- 2.14576721191e-06 seconds ---

这是为什么?这是否意味着我必须避免使用第一种方法而始终使用第二种方法?

最佳答案

len(input_list[i:])

这会复制列表从位置 i 到末尾,O(n) 操作(其中 n 中的元素数切片)。然后它询问它的长度是多少:O(1)。所以 O(n) 总体而言。

len(input_list) -i

这只是要求长度 (O(1)) 然后减去(也是 O(1))。所以 O(1) 总体而言。

参见:https://wiki.python.org/moin/TimeComplexity

关于python - 比较两种获取子列表长度的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31767662/

相关文章:

javascript - 如何使用 Python 和/或 Javascript 自动验证 ngrok 密码?

python - 通过 PyQt 信号/槽连接时对象被复制的频率是多少?

php - iPython 中的 print_r 功能

python - tf.data.Dataset.map() 用于由多个切片组成的数据集

Python——重构后的程序返回不同的结果

python - 如何测试设置和检查依赖于未经测试的方法的方法?

python - 在 PyCharm 中的远程解释器上运行远程脚本

python - 如何按行而不是列对数据框进行排序?

python - 在 "for line in data"循环中使用 .readline() 将文件的多行分配给多个变量

python - 在列表理解中解压缩值