为什么内置python zip功能?

时间:2014-11-21 06:21:51

标签: python zip built-in

我知道Python的zip()函数是一个用C语言编写的内置函数,但我对它们为什么会受到困扰感到困惑。

如果我没弄错,在Python中,zip()可以改写为:

def zip(seq1, seq2):
    out = []
    for i in range(len(seq1)):
        out.append((seq1[i], seq2[i]))

    return out

(假设seq1seq2的大小相同。实际zip()将使用最小序列的长度)

这是一段非常简单的代码,所以我想知道为什么他们让zip()成为内置函数?我只能假设在C中写它是为了让它更快 - 如果是这样的话,有人知道多快了吗? (我知道这取决于尺寸seq1seq2

1 个答案:

答案 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.izipzip

相同

即使是大数据阵列: -

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