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

我有以下清单。在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,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的好机会:。很抱歉造成混淆<代码>一个看起来不像你拥有的,它只是一个没有嵌套的运行列表。我这样分组是为了更好地形象化。很抱歉造成混乱<代码>一个看起来不像你拥有的,它只是一个没有嵌套的运行列表。我这样分组是为了更好地想象它。