如何计算zip()的时间复杂度?
testList = [[1,2,3]for _ in range(5)]
zip(*testList)
答案 0 :(得分:11)
假设你压缩了N次迭代。
在 python 3.x 中,zip函数本身在O(1)
时间运行,因为它只分配一个特殊的iterable(称为zip对象),并将参数数组赋值给内部领域。函数调用本身(在控件到达zip之前)是O(N)
,因为解释器必须将参数转换为数组。迭代器上的每个后续next
调用也在O(N)
中运行。因此,耗尽zip对象是O(N*M)
,假设M是迭代的平均(或最小)长度,不包括迭代本身生成项目所花费的时间(因为它独立于zip)。
在 python 2.x 中,zip函数返回一个列表。该列表必须在调用期间构造,这与前一个示例中的迭代器耗尽相当,所以O(N*M)
,不计算在压缩迭代中花费的时间。