Python 中 zip() 的时间复杂度是多少?
Posted
技术标签:
【中文标题】Python 中 zip() 的时间复杂度是多少?【英文标题】:What is the time complexity of zip() in Python? 【发布时间】:2016-08-21 00:52:34 【问题描述】:如何计算 zip() 的时间复杂度?
testList = [[1,2,3]for _ in range(5)]
zip(*testList)
【问题讨论】:
它的 O(N*M) 其中 N 是最短列表的长度,M 是列表的数量 您需要区分您使用的是 python 2 还是 python 3,因为zip
在两者中具有不同的功能。
我猜调用本身在 python 3 中是 O(1) ......但我认为评估保持不变......也许我完全错了
您是否尝试过使用不同数据大小运行一些测试?
@Tadhg McDonald-Jensen 雅,你是对的。我在 python 2.7 中运行了这些代码,它将返回一个列表。
【参考方案1】:
假设您压缩了 N 个可迭代对象。
在 python 3.x 中,zip 函数本身在O(1)
时间运行,因为它只是分配一个特殊的可迭代对象(称为 zip 对象),并将参数数组分配给一个内部字段.函数调用本身(在 zip 中控制之前)是O(N)
,因为解释器必须将参数转换为数组。迭代器上的每个后续next
调用也在O(N)
中运行。因此,用尽 zip 对象是O(N*M)
假设 M 是可迭代对象的平均(或最小)长度,不包括可迭代对象本身生成项目所花费的时间(因为它与 zip 无关)。
在 python 2.x 中,zip 函数返回一个列表。该列表必须在调用期间构建,这相当于在前面的示例中耗尽迭代器,所以O(N*M)
,不计算在压缩迭代中花费的时间。
【讨论】:
以上是关于Python 中 zip() 的时间复杂度是多少?的主要内容,如果未能解决你的问题,请参考以下文章
python 怎么读取网络zip字节流,并保存到本地zip文件中?