python - Python 多维列表初始化 ...或纯 Python 等价于 numpy.zero
问题描述
我需要在“纯”python 中创建一个 2x2x2x2 维列表,即不使用 numpy。
使用 numpy,我会简单地写:
numpy.zeros((2,2,2,2))
在“普通蟒蛇”中,我尝试过:
>>> aa=[[[[0]*2]*2]*2]
>>> aa
[[[[0, 0], [0, 0]], [[0, 0], [0, 0]]]]
看起来不错,但是
>>> aa[0][0][0][0]=1
结果是:
>>> aa
[[[[1, 0], [1, 0]], [[1, 0], [1, 0]]]]
这当然不是我想要的
我一直觉得python中的这个可变对象是一个奇怪的设计选择......无论如何,有没有一种简单的pythonic方法来实现我想要的一个不需要导入的单行。我知道深度复制列表可以解决问题,但感觉远非优雅...... :-)
解决方案
试试这个:
>>> aa = [[[0 for _ in range(2)] for _ in range(2)] for _ in range(2)]
>>> aa
[[[0, 0], [0, 0]], [[0, 0], [0, 0]]]
>>> aa[0][0][0] = 1
>>> aa
[[[1, 0], [0, 0]], [[0, 0], [0, 0]]]
推荐阅读
- java - 如何在不使用 pojo 类的情况下在 spring boot 中创建 mongodb 集合?
- java - Java - 如何将时区转换为不同的格式?
- python - 计算每个固定时间对刺激的反应平均值
- java - traceId 和 spanId 在整个记录器中都相同
- postgresql - 尝试连接到任何 Postgres 13 实例时出现“错误:数据库 'postgres' 的连接太多”
- go - 验证用户是否已使用 MSAL/Azure AD 登录并向他们提供我的单独 API 的令牌?
- authorization - 我可以在 NATS.io 中实现自定义授权吗?
- cmake - CMake 找不到 GMP
- bash - Base16和bash中的交换字节顺序
- oracle - Oracle (OR) 中 Where 中的 IF/CASE 语句