为什么我不能使用此代码制作二维数组?

时间:2017-09-07 01:05:57

标签: python list

我试图解决问题,但遇到问题。

当我这样做时:

arr=[[[0]*5]*5]

我明白了:

[[[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]]]

但是当我尝试选择一个元素时:

arr[0][0]

它返回:

[0, 0, 0, 0, 0]

为什么?

5 个答案:

答案 0 :(得分:6)

只需移除外部[]

即可
arr=[[0]*5]*5

然而,这是创建嵌套列表的不好方法。最好使用:

arr = [[0 for _ in range(5)] for _ in range(5)]

这样你就不会被"shared reference problem"咬伤。

答案 1 :(得分:0)

你有一对额外的方括号。试试arr = [[0]*5]*5

答案 2 :(得分:0)

你有一对额外的括号。

尝试改为:

arr = [[0] * 5] * 5

我们可以通过分解您的代码来证明这一点:

arr= [ [ [ 0 ] * 5 ] * 5]

我们将最内层压缩为:arr = [ [ [0]*5 ] * 5],返回:

[ [[0, 0, 0, 0, 0]] * 5]

现在内部部分返回:

[[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]]

如您现在所需的结果,我们现在看到不再需要其余的括号。

答案 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,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]]

省略额外的括号。

arr=[[0]*5]*5

答案 4 :(得分:0)

arr = [[0]*5]*5 #will work

因此arr = [[[0]*5]*5]相当于另一个列表中的arr = [your required arr]