用于在python中将项列表拆分为列表(拆分函数)的代码

时间:2016-03-01 20:49:13

标签: python-2.7

我有一个分割列表的功能, 例子

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)]

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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设计的目的,但您可能只需要使用它。