使用高阶函数的Python

2024-06-12 06:41:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试用以下方式填充3D列表:

l1 = []
for _ in range(5):
    l2 = []
    for _ in range(10):
        l2.append([0] * 20)
    l1.append(l2)

它看起来真的很恶心,我觉得应该有一些方法来使用高阶函数或非函数或列表理解来实现这一点。任何一个Python忍者能告诉我如何做到这一点吗?在

谢谢!在


Tags: 方法函数inl1列表for方式range
3条回答

如果计划“矢量化”计算,可以考虑使用numpy

l1 = np.zeros((5, 10, 20))

The docs.

>>> l1 == [[[0]*20]*10]*5
True

但是这样会产生别名-例如,更改a[0][1][2]也会更改a[4][5][2],为了避免这种情况,需要复制:

^{pr2}$

试试这个:

[[[0]*20 for _ in xrange(10)] for _ in xrange(5)]

@zch最初给出的答案有一个非常严重的问题:它在生成的矩阵中一遍又一遍地复制同一个列表,因此一个位置的更改将同时反映到其他不相关的位置!在

我的解决方案确实相当于您对l1的定义,但是由于使用了列表理解,所以写得更简洁一些。注意,我们没有使用迭代变量,所以可以使用_作为占位符。而且,假设您使用的是python2.x,使用xrange是一个更好的主意,因为我们不需要range创建的列表。(如果使用python3.x,可以使用range

相关问题 更多 >