重新排列 python 中的列表列表
Re-arrange lists of lists in python
我需要将这个列表列表转换成以下格式。
我通过创建一个函数并创建 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
将 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]]
您基本上是在尝试转置二维列表。这是对此的实现。
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
有一种更简洁的使用推导式的方法:
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]
这是一个矩阵转置。 Numpy 像这样内置了这个
import numpy as np
ans = np.transpose(values)
我需要将这个列表列表转换成以下格式。 我通过创建一个函数并创建 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
将 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]]
您基本上是在尝试转置二维列表。这是对此的实现。
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
有一种更简洁的使用推导式的方法:
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]
这是一个矩阵转置。 Numpy 像这样内置了这个
import numpy as np
ans = np.transpose(values)