我知道Python的zip()
函数是一个用C语言编写的内置函数,但我对它们为什么会受到困扰感到困惑。
如果我没弄错,在Python中,zip()
可以改写为:
def zip(seq1, seq2):
out = []
for i in range(len(seq1)):
out.append((seq1[i], seq2[i]))
return out
(假设seq1
和seq2
的大小相同。实际zip()
将使用最小序列的长度)
这是一段非常简单的代码,所以我想知道为什么他们让zip()
成为内置函数?我只能假设在C中写它是为了让它更快 - 如果是这样的话,有人知道多快了吗? (我知道这取决于尺寸seq1
和seq2
)
答案 0 :(得分:1)
In [148]: def zipped(seq1, seq2):
out = []
for i in range(len(seq1)):
out.append((seq1[i], seq2[i]))
return out
.....:
In [149]: %timeit zipped(range(10), range(11, 21))
100000 loops, best of 3: 3.06 µs per loop
In [152]: %timeit zip(range(10), range(11, 21))
1000000 loops, best of 3: 1.23 µs per loop
您可以看到zipped
和inbuild zip
函数中存在执行时间差异(超过两次)。
from itertools import izip
In [156]: %timeit list(izip(range(10), range(11, 21)))
100000 loops, best of 3: 1.98 µs per loop
虽然itertools.izip
与zip
,
即使是大数据阵列: -
In [157]: %timeit zipped(range(10**5), range(10**5))
10 loops, best of 3: 77.3 ms per loop
In [158]: %timeit zip(range(10**5), range(10**5))
10 loops, best of 3: 31.5 ms per loop
In [159]: %timeit list(izip(range(10**5), range(10**5)))
10 loops, best of 3: 37.4 ms per loop