比方說,我有一個列表[[1,2,3],[4,5,6]]
如何轉換列表?
如何調換它們,所以它們是:[[1, 4], [2, 5], [3, 6]]
?
我必須使用zip
函數嗎? zip
功能是最簡單的方法嗎?
def m_transpose(m):
trans = zip(m)
return trans
比方說,我有一個列表[[1,2,3],[4,5,6]]
如何轉換列表?
如何調換它們,所以它們是:[[1, 4], [2, 5], [3, 6]]
?
我必須使用zip
函數嗎? zip
功能是最簡單的方法嗎?
def m_transpose(m):
trans = zip(m)
return trans
zip()
似乎沒有做你想要的,使用zip()
你得到list
的tuples
。這應該工作,雖然:
>>> 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]]
您可以使用map與None
作爲第一個參數:
>>> 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得到相同的功能...)
使用zip()
的確切方式得到你想要的是:
>>> l = [[1,2,3],[4,5,6]]
>>> [list(x) for x in zip(*l)]
>>> [[1, 4], [2, 5], [3, 6]]
該代碼使用list
關鍵字鑄造返回由zip
tuples
成lists
。