2016-11-21 22 views
0

我正在使用python 2.7。为什么不能python映射更大的列表?

此代码:

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)))) 

什么可以做,以使第二片段的工作?

+0

在某些时候,你试图把太多东西放在内存中。也许你可以使用迭代器,或为处理大型数组而设计的库,或......?你究竟在做什么?尽管如此,尽力实现人为的例子? – jonrsharpe

+0

试图线程。请参阅:http://stackoverflow.com/questions/40729592/passing-multiple-arguments-to-pool-map-using-class-function –

+0

这究竟与线程有关,还是与该示例有关? – jonrsharpe

回答

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)))) 
相关问题