我有一个列表:
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(http://yt-project.org/)YT data analysis代码。 YT是一个用于分析天体物理数据的Python包。
在我的代码中有一行
axes = axes[i][j]
我想将列表中的第一个值提供给
pf = load(L[0])
当ij为00时,列表中的第二个值为
pf = load(L[1])
当ij是01等等...... 请建议我实现这一目标的最有效方法? 谢谢
答案 0 :(得分:2)
使用grouper recipe将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
)。
答案 1 :(得分:0)
使用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]]
答案 2 :(得分:0)
如果你对numpy有好处,它具有matlab的大部分功能,你可以通过将list转换为numpy数组来实现。如果您计划矩阵或矢量运算,这也很方便。然后,您可以通过重新整形1D阵列来获取2D阵列。
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