为什么python不能映射更大的列表?

时间:2016-11-21 22:03:19

标签: python-2.7

我正在使用python 2.7。

此代码有效:

def function(b,c):
    return (b,c)

print(list(map(function,*zip([1]*2,[4]*2))))

然而,这不是:

def function(b,c):
    return (b,c)

print(list(map(function,*zip([1]*20,[4]*20))))

可以做些什么来使第二个代码段工作?

1 个答案:

答案 0 :(得分:1)

你对*zip([1]*20,[4]*20)所做的事情感到困惑。看起来您正在尝试执行以下调用:

function(1, 4)
function(1, 4)
... [20 calls]

但那不是你真正在做的事情。您的代码实际上尝试执行以下调用:

function(1, 1, 1, ... [20 1s])
function(4, 4, 4, ... [20 4s])

您的选择是停止使用*zip,更改function接受参数的方式,或使用itertools.starmap

def function(b, c):
    ...

print(list(map(function, [1]*20, [4]*20)))

def function(x):
    b, c = x
    ...

print(list(map(function, zip([1]*20, [4]*20))))

import itertools

def function(b, c):
    ...

print(list(itertools.starmap(function, zip([1]*20, [4]*20))))