Py学习  »  Python

在python中重新排列列表

Ali Naveed • 3 年前 • 1388 次点击  

我需要将这些列表转换成以下格式。 我通过创建一个函数并创建4个附加列表将数据拆分为所需的格式来实现这一点。 我想知道是否可以用一种更简单的方法来解决这个问题。

我写的代码就在最后。

谢谢

vals = [ [1,  2,  3,  4],
         [5,  6,  7,  8],
         [9 , 10, 11, 12],
         [13, 14, 15, 16],
         [17, 18, 19, 20],
         [21, 22, 23, 24],
         [25, 26, 27, 28],
         [29, 30, 31, 32],
         [33, 34, 35, 36]]

这需要转换为列格式,如下所示:

out = [[ 1,  5,  9, 13, 17, 21, 25, 29, 33],
       [ 2,  6, 10, 14, 18, 22, 26, 30, 34],
       [ 3,  7, 11, 15, 19, 23, 27, 31, 35],
       [ 4,  8, 12, 16, 20, 24, 28, 32, 36]]
def all_list(value):
    result = {}
    amount = []
    duration = []
    rate = []
    down_payment = []
    headers = parse_headers(file1[0])
    total = [amount, duration, rate, down_payment]
    for v in range(0,len(value)):
        amount.append(value[v][0])
        duration.append(value[v][1])
        rate.append(value[v][2])
        down_payment.append(value[v][3])
    for k,v in zip(total, headers):
        result[v] = k
    return result
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133724
 
1388 次点击  
文章 [ 4 ]  |  最新文章 3 年前
Samwise
Reply   •   1 楼
Samwise    3 年前

使用 zip * 接线员:

>>> values = [[100000.0, 36.0, 0.08, 20000.0],
...  [200000.0, 12.0, 0.1, 0.0],
...  [628400.0, 120.0, 0.12, 100000.0],
...  [4637400.0, 240.0, 0.06, 0.0],
...  [42900.0, 90.0, 0.07, 8900.0],
...  [916000.0, 16.0, 0.13, 0.0],
...  [45230.0, 48.0, 0.08, 4300.0],
...  [991360.0, 99.0, 0.08, 0.0],
...  [423000.0, 27.0, 0.09, 47200.0]]
>>> list(zip(*values))
[(100000.0, 200000.0, 628400.0, 4637400.0, 42900.0, 916000.0, 45230.0, 991360.0, 423000.0), (36.0, 12.0, 120.0, 240.0, 90.0, 16.0, 48.0, 99.0, 27.0), (0.08, 0.1, 0.12, 0.06, 0.07, 0.13, 0.08, 0.08, 0.09), (20000.0, 0.0, 100000.0, 0.0, 8900.0, 0.0, 4300.0, 0.0, 47200.0)]

如果让新列表由列表而不是元组组成很重要,那么映射 list 在上面:

>>> list(map(list, zip(*values)))
[[100000.0, 200000.0, 628400.0, 4637400.0, 42900.0, 916000.0, 45230.0, 991360.0, 423000.0], [36.0, 12.0, 120.0, 240.0, 90.0, 16.0, 48.0, 99.0, 27.0], [0.08, 0.1, 0.12, 0.06, 0.07, 0.13, 0.08, 0.08, 0.09], [20000.0, 0.0, 100000.0, 0.0, 8900.0, 0.0, 4300.0, 0.0, 47200.0]]
Kaleba KB Keitshokile
Reply   •   2 楼
Kaleba KB Keitshokile    3 年前

这是一个矩阵转置。Numpy内置了这样的功能

import numpy as np
ans = np.transpose(values)
Eric Jin
Reply   •   3 楼
Eric Jin    3 年前

有一种更简洁的方法可以使用理解:

amount = [item[0] for item in value]
duration = [item[1] for item in value]
rate = [item[2] for item in value]
down_payment = [item[3] for item in value]
akaAbdullahMateen
Reply   •   4 楼
akaAbdullahMateen    3 年前

你基本上是在尝试转换二维列表。下面是一个实现。

def transpose(l1):
    l2 = []
    for i in range(len(l1[0])):
        row =[]
        for item in l1:
            row.append(item[i])
        l2.append(row)
    return l2