2016-03-01 43 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设计的目的,也许你只需要使用它。