2016-11-21 50 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)))) 
相關問題