Python 如何将9个元素列表中的值输入到3×3矩阵

Python 如何将9个元素列表中的值输入到3×3矩阵,python,for-loop,Python,For Loop,我有这样一个清单: L = [11, 15, 18, 20, 22, 25, 30, 35, 40] 共有9个要素。 我想把每个值输入到3×3矩阵的第(ij)个位置 00 01 02 10 11 12 20 21 22 也就是说,11个应该转到第(00)位,15个应该转到第(01)位,18个应该转到第(02)位,20个应该转到第(10)位,依此类推 请建议我使用for循环实现此目的的最有效方法。因为我正在编写一个YT()代码。YT是一个用于分析天体物理数据的Python包 在我的代码中有一行

我有这样一个清单:

L = [11, 15, 18, 20, 22, 25, 30, 35, 40]
共有9个要素。 我想把每个值输入到3×3矩阵的第(ij)个位置

00 01 02
10 11 12
20 21 22
也就是说,11个应该转到第(00)位,15个应该转到第(01)位,18个应该转到第(02)位,20个应该转到第(10)位,依此类推

请建议我使用for循环实现此目的的最有效方法。因为我正在编写一个YT()代码。YT是一个用于分析天体物理数据的Python包

在我的代码中有一行

axes = axes[i][j]
我想将列表中的第一个值提供给

pf = load(L[0])
pf = load(L[1])
当ij为00时,则列表中的第二个值为

pf = load(L[0])
pf = load(L[1])
当ij为01时,依此类推。。。 请告诉我实现这一目标的最有效方法? 谢谢

使用将
L
的元素收集为3组:

L = iter(L)
zip(*[L]*3)
比如说,

In [11]: L = [11, 15, 18, 20, 22, 25, 30, 35, 40]

In [12]: L = iter(L)

In [13]: zip(*[L]*3)
Out[13]: [(11, 15, 18), (20, 22, 25), (30, 35, 40)]
我假设“矩阵”是指元组列表。如果您希望将其转换为真正的矩阵对象(例如
numpy.matrix
),则很容易


使用
itertools.islice有一个.

>>> L = [11, 15, 18, 20, 22, 25, 30, 35, 40]
>>> from itertools import islice
>>> it = iter(L)
>>> [[x] + list(islice(it, 2)) for x in it]
[[11, 15, 18],
 [20, 22, 25],
 [30, 35, 40]]
使用基于索引的切片:

>>> [L[i:i+3] for i in xrange(0, len(L), 3)]
[[11, 15, 18],
 [20, 22, 25],
 [30, 35, 40]]

如果您对numpy还满意,它拥有matlab的大部分功能,您可以通过将列表转换为numpy数组来实现这一点。如果您计划进行矩阵或向量运算,这也很方便。然后,可以通过重塑一维阵列的形状来获得二维阵列

In [91]: arr = numpy.array(L).reshape((3,3))

Out[91]: arr
array([[11, 15, 18],
       [20, 22, 25],
       [30, 35, 40]])


In [92]: arr[0]
Out[92]: array([11, 15, 18])

In [93]: arr[0][1]
Out[93]: 15

In [94]: arr[2][2]
Out[94]: 40