2014-05-07 68 views
1

比方說,我有一個列表[[1,2,3],[4,5,6]]如何轉換列表?

如何調換它們,所以它們是:[[1, 4], [2, 5], [3, 6]]

我必須使用zip函數嗎? zip功能是最簡單的方法嗎?

def m_transpose(m): 
    trans = zip(m) 
    return trans 

回答

1

我要說zip*splat是最簡單的方法,是的。

>>> list_ = [[1,2,3],[4,5,6]] 
>>> zip(*list_) 
[(1, 4), (2, 5), (3, 6)] 

請注意,您得到的是元組內的元組而不是列表。如果您需要列表,請使用map(list, zip(*l))

0

zip()似乎沒有做你想要的,使用zip()你得到listtuples。這應該工作,雖然:

>>> new_list = [] 
>>> old_list = [[1,2,3],[4,5,6]] 
>>> for index in range(len(old_list[0])): 
...  new_list.append([old_list[0][index], old_list[1][index]]) 
... 
>>> new_list 
[[1, 4], [2, 5], [3, 6]] 
1

您可以使用mapNone作爲第一個參數:

>>> li=[[1,2,3],[4,5,6]] 
>>> map(None, *li) 
[(1, 4), (2, 5), (3, 6)] 

不像zip它可以在不平坦的名單:

>>> li=[[1,2,3],[4,5,6,7]] 
>>> map(None, *li) 
[(1, 4), (2, 5), (3, 6), (None, 7)] 
>>> zip(*li) 
[(1, 4), (2, 5), (3, 6)] 
#      ^^ 7 missing... 

然後再次調用地圖list作爲第一個參數,如果你想子元素是列表而不是元組:

>>> map(list, map(None, *li)) 
[[1, 4], [2, 5], [3, 6]] 

(注意:在Python 3.x中不支持使用映射與None轉置矩陣。從itertools使用zip_longest得到相同的功能...)

0

使用zip()的確切方式得到你想要的是:

>>> l = [[1,2,3],[4,5,6]] 
>>> [list(x) for x in zip(*l)] 
>>> [[1, 4], [2, 5], [3, 6]] 

該代碼使用list關鍵字鑄造返回由ziptupleslists