首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用高阶函数的Python

使用高阶函数的Python
EN

Stack Overflow用户
提问于 2013-02-21 06:43:25
回答 3查看 415关注 0票数 3

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

代码语言:javascript
复制
l1 = []
for _ in range(5):
    l2 = []
    for _ in range(10):
        l2.append([0] * 20)
    l1.append(l2)

它看起来真的很恶心,我觉得应该有一些方法来使用高阶函数或无名函数或列表理解来实现这一点。有没有python忍者可以教我怎么做到这一点?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-21 06:47:06

代码语言:javascript
复制
>>> l1 == [[[0]*20]*10]*5
True

但是这样就有了别名-例如,更改a[0][1][2]也会更改a[4][5][2],为了避免这种情况,副本是必要的:

代码语言:javascript
复制
[[[0]*20 for i in range(10)] for j in range(5)]
票数 1
EN

Stack Overflow用户

发布于 2013-02-21 06:46:26

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

代码语言:javascript
复制
l1 = np.zeros((5, 10, 20))

The docs.

票数 3
EN

Stack Overflow用户

发布于 2013-02-21 07:00:09

试试这个:

代码语言:javascript
复制
[[[0]*20 for _ in xrange(10)] for _ in xrange(5)]

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14991344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档