python列表操作垂直嵌套,使其看起来像一个矩阵
我有以下清单。在python中,它看起来像python列表操作垂直嵌套,使其看起来像一个矩阵,python,Python,我有以下清单。在python中,它看起来像[15,20,25,35,-20…等] 15 20 25 35 -20 -15 -10 -5 10 15 20 25 -25 -20 -15 -10 5 10 15 20 -35 -25 -20 -15 我想这样垂直嵌套: [[15,10,5],[20,15,10],[25,20,15],[35,25,20],-20,-25,-35],…等] 因此,它涉及某种转置操作,但向后计数,例如,转置将为列表中的第一项提供[5,10,1
[15,20,25,35,-20…等]
15 20 25 35 -20 -15 -10 -5
10 15 20 25 -25 -20 -15 -10
5 10 15 20 -35 -25 -20 -15
我想这样垂直嵌套:
[[15,10,5],[20,15,10],[25,20,15],[35,25,20],-20,-25,-35],…等]
因此,它涉及某种转置操作,但向后计数,例如,转置将为列表中的第一项提供[5,10,15]
,而不是[15,10,5]
最好的方法是什么?(最短、可读性最强的代码)
如果有人对最短运行时间也有建议,对更大的数据集也会有帮助
from pprint import pprint
from operator import itemgetter
lst = [15, 20, 25, 35, -20, -15, -10, -5, 10, 15, 20, 25, -25,\
-20, -15, -10, 5, 10, 15, 20, -35, -25, -20, -15]
# Python 3
l = len(lst) // 3
# Or a single slash in Python 2: l = len(lst) / 3
# Just for diversity
a = [itemgetter(*range(x, x+l))(lst) for x in range(0, len(lst), l)]
pprint(list(zip(*a)))
输出:
[(15, 10, 5),
(20, 15, 10),
(25, 20, 15),
(35, 25, 20),
(-20, -25, -35),
(-15, -20, -25),
(-10, -15, -20),
(-5, -10, -15)]
输出:
[(15, 10, 5),
(20, 15, 10),
(25, 20, 15),
(35, 25, 20),
(-20, -25, -35),
(-15, -20, -25),
(-10, -15, -20),
(-5, -10, -15)]
您可以使用列表理解对元素进行分组,然后使用
zip
函数对其进行转置,如下所示
data = [15, 20, 25, 35, -20, -15, -10, -5, 10, 15, 20,
25, -25, -20, -15, -10, 5, 10, 15, 20, -35, -25, -20, -15]
length = len(data) / 3
data = [data[i:i + length] for i in xrange(0, len(data), length)]
[[15, 20, 25, 35, -20, -15, -10, -5],
[10, 15, 20, 25, -25, -20, -15, -10],
[5, 10, 15, 20, -35, -25, -20, -15]]
到目前为止,我们对数据进行了如下分组
data = [15, 20, 25, 35, -20, -15, -10, -5, 10, 15, 20,
25, -25, -20, -15, -10, 5, 10, 15, 20, -35, -25, -20, -15]
length = len(data) / 3
data = [data[i:i + length] for i in xrange(0, len(data), length)]
[[15, 20, 25, 35, -20, -15, -10, -5],
[10, 15, 20, 25, -25, -20, -15, -10],
[5, 10, 15, 20, -35, -25, -20, -15]]
现在,我们只需将数据
转换为邮政编码
print zip(*data)
输出
[(15, 10, 5),
(20, 15, 10),
(25, 20, 15),
(35, 25, 20),
(-20, -25, -35),
(-15, -20, -25),
(-10, -15, -20),
(-5, -10, -15)]
zip(*data)
意味着我们解压缩数据的所有元素
,并将每个元素作为参数传递给zip
。相当于
zip(data[0], data[1], data[2])
您可以使用列表理解对元素进行分组,然后使用
zip
函数对其进行转置,如下所示
data = [15, 20, 25, 35, -20, -15, -10, -5, 10, 15, 20,
25, -25, -20, -15, -10, 5, 10, 15, 20, -35, -25, -20, -15]
length = len(data) / 3
data = [data[i:i + length] for i in xrange(0, len(data), length)]
[[15, 20, 25, 35, -20, -15, -10, -5],
[10, 15, 20, 25, -25, -20, -15, -10],
[5, 10, 15, 20, -35, -25, -20, -15]]
到目前为止,我们对数据进行了如下分组
data = [15, 20, 25, 35, -20, -15, -10, -5, 10, 15, 20,
25, -25, -20, -15, -10, 5, 10, 15, 20, -35, -25, -20, -15]
length = len(data) / 3
data = [data[i:i + length] for i in xrange(0, len(data), length)]
[[15, 20, 25, 35, -20, -15, -10, -5],
[10, 15, 20, 25, -25, -20, -15, -10],
[5, 10, 15, 20, -35, -25, -20, -15]]
现在,我们只需将数据
转换为邮政编码
print zip(*data)
输出
[(15, 10, 5),
(20, 15, 10),
(25, 20, 15),
(35, 25, 20),
(-20, -25, -35),
(-15, -20, -25),
(-10, -15, -20),
(-5, -10, -15)]
zip(*data)
意味着我们解压缩数据的所有元素
,并将每个元素作为参数传递给zip
。相当于
zip(data[0], data[1], data[2])
根据您正在做的其他工作,这可能是一个探索NumPy的好机会:。根据您正在做的其他工作,这可能是一个探索NumPy的好机会:。很抱歉造成混淆<代码>一个看起来不像你拥有的,它只是一个没有嵌套的运行列表。我这样分组是为了更好地形象化。很抱歉造成混乱<代码>一个看起来不像你拥有的,它只是一个没有嵌套的运行列表。我这样分组是为了更好地想象它。