2016-03-01 45 views
0

我有一個函數分裂列表的列表到列表(分割功能), 例如代碼爲分割的項目在python

def split(*arg): 
    row = len(arg[0]) 
    col = len(arg) 
    new = [row * col] 
    for i in row: 
     for j in col: 
      new[j][i] = arg[i][j] 
    return new 

    # this is method for split the list but it is include errors 

希望的輸出:

list_a = [(1,2,3),(8,9,10),(100,20,15)] 

split (list_a) 
[(1,8,100),(2,9,20),(3,10,15)] 
+0

根據預期的輸出我會說你想找到[轉置](http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.transpose.html) –

回答

0

這是非常相似到Transpose nested list in python

但是,您想要一個元組列表作爲結果,所以我們甚至不需要列表理解。只是

list_a = [(1,2,3),(8,9,10),(100,20,15)] 

zip(*list_a) # Python 2 
# or 
list(zip(*list_a)) # Python 3 
# [(1, 8, 100), (2, 9, 20), (3, 10, 15)] 

它使用argument unpacking和內置zip function

0

基於所需的輸出似乎您試圖找到transpose所以你可以用numpy的是這樣做的:

import numpy 
list_a = [(1,2,3),(8,9,10),(100,20,15)] 
transpose_a = numpy.transpose(list_a) 
print(transpose_a) 
#or 
#print(list(transpose_a)) 

但你split發生故障,有幾個原因的原因:

  • 您使用*arg perameter但不拆包的說法,所以你需要調用它像split(*list_a)
  • new = [row * col]創造帶有一個項目的新列表而不是two dimensional list
  • 你是iterating over integers而不是使用range(row)range(col)
  • 行和列需要交換:row = len(arg)col = len(arg[0]),因爲您使用行作爲第一維,列作爲第二維。

雖然它發生在我身上,這是zip設計的目的,也許你只需要使用它。