社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

在python中重新排列列表

Ali Naveed • 3 年前 • 1287 次点击  

我需要将这些列表转换成以下格式。 我通过创建一个函数并创建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
 
1287 次点击  
文章 [ 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