马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
各位大神:
我尝试用for嵌套循环语句生成一个三维列表,我的代码如下:
A = [0] * 3
for i in range(3):
A[i] = [0] * 3
for j in range(i):
A[i][j] = [0] * 3
但生成的结果却是:[[0, 0, 0], [[0, 0, 0], 0, 0], [[0, 0, 0], [0, 0, 0], 0]],而非[[[000],[000],[000]],[[000],[000],[000]],[[000],[000],[000]]],麻烦大神帮我看下我的代码哪里有问题,谢谢!
先看逻辑:
A = [0] * 3
生成 [0, 0, 0]。
第一层循环 for i in range(3):
每次把 A[i] 改为 [0]*3 → 得到一维列表 [0,0,0]
第二层循环 for j in range(i):
注意:range(i) 不会覆盖全部 j=0,1,2
它生成的是:
- 当 i=0:range(0) → 不执行
- 当 i=1:range(1) → 只执行 j=0
- 当 i=2:range(2) → 执行 j=0,1
在这些位置把 A[i][j] 替换为 [0,0,0],但 只替换部分位置,不是整行。
结果自然会是一个“下三角区域变成三维列表,其余仍是整数 0”。
因此你的结果变成:
- [
- [0, 0, 0],
- [[0,0,0], 0, 0],
- [[0,0,0], [0,0,0], 0]
- ]
复制代码
代码并不是生成 3×3×3 结构,而是在不同位置替换部分值。
正确写法:生成 3×3×3 立方体
你想要的结果是:
- [
- [[0,0,0], [0,0,0], [0,0,0]],
- [[0,0,0], [0,0,0], [0,0,0]],
- [[0,0,0], [0,0,0], [0,0,0]]
- ]
复制代码
正确写法应该是用三层循环:
方法1:三层for循环(最清晰)
- A = []
- for i in range(3):
- layer = []
- for j in range(3):
- row = [0] * 3
- layer.append(row)
- A.append(layer)
复制代码
方法2:列表推导式(最简洁)
- A = [[[0 for _ in range(3)] for _ in range(3)] for _ in range(3)]
复制代码
|