2011-08-10 39 views
4

請看下面的Python代碼:地圖(函數,序列),其中函數返回兩個值

def function(x): 
    return x, x+1 

sequence = range(5) 

map(function, sequence) 

這將返回

[(0,1), (1,2), (2,3), (3,4), (4,5)] 

我想要得到的輸出

[0, 1, 2, 3, 4], [1, 2, 3, 4, 5] 

這意味着,我想將函數的兩個輸出分成兩個不同的列表。我可以實現這個沒有循環我的列表?

在實際的代碼中,我不會有整數列表,而是類實例列表。所以我可能會得到一些我想避免的copy/deepcopy問題。

回答

3
>>> a = zip(*map(function, sequence)) 
>>> for i in a: print(i) 
... 
(0, 1, 2, 3, 4) 
(1, 2, 3, 4, 5) 
1

另一種方法是:

>>> seq = range(5+1) 
>>> a = [seq[:-1], seq[1:]] 
>>> a 
[[0, 1, 2, 3, 4], [1, 2, 3, 4, 5]]