正确创建Python二维数组

举报
宇宙之一粟 发表于 2022/01/15 00:36:57 2022/01/15
【摘要】 Java创建二维数组 我门来看看Java创建二维数组的格式: type arrayName[ ][ ]; type [ ][ ]arrayName; 12 比如: int [ ][ ] arr=...

Java创建二维数组

我门来看看Java创建二维数组的格式:

type arrayName[ ][ ];
type [ ][ ]arrayName;

  
 
  • 1
  • 2

比如:

int [ ][ ]  arr=new  int [5][3]; 

  
 
  • 1

一个5行3列的整数二维数组就创建了。轻松写意…

创建一个Python二位数组的尴尬

也想模仿一下Java,奈何只能:

>>> li[][] = [][]
  File "<stdin>", line 1
    li[][] = [][]
       ^
SyntaxError: invalid syntax

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

抱歉,行不通。

但是可以这样,

>>> li = [[1,2,3], [4,5,6]]
>>> li
[[1, 2, 3], [4, 5, 6]]

  
 
  • 1
  • 2
  • 3

这样又太麻烦,我想有没有更好的方法。

你认为的Python二维数组

方法一:

>>> rows, cols = (2, 3)
>>> arr = [[0] * cols] * rows
>>> arr
[[0, 0, 0], [0, 0, 0]]

  
 
  • 1
  • 2
  • 3
  • 4

方法二:

>>> arr = [[0 for i in range(cols)] for j in range(rows)]
>>> arr
[[0, 0, 0], [0, 0, 0]]

  
 
  • 1
  • 2
  • 3

两种方式都提供与现在相同的输出。

更改一下元素看看

让我们更改方法一和方法二的数组中的元素:

# 方法一
>>> rows, cols = (2, 3)
>>> arr = [[0] * cols] * rows
>>> arr[0][0] = 1
>>> for row in arr:
...     print(row)
...
[1, 0, 0]
[1, 0, 0]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

奇怪的事情发生了,明明我只改变了arr[0][0],我希望的是第一行的第一个元素更改为1,但每行的第一个元素更改为1。

# 方法二
>>> rows, cols = (2, 3)
>>> arr = [[0 for i in range(cols)] for j in range(rows)]
>>> arr[0][0] = 1
>>> for row in arr:
...     print(row)
...
[1, 0, 0]
[0, 0, 0]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

方法二正是我想要的答案。

什么原因呢?

全怪Python的浅拷贝,如果你还不懂浅拷贝和深拷贝,看看这篇学习Python一年,这次终于弄懂了浅拷贝和深拷贝

我这里就简单解释一下:

方法一中,Python不会创建2个list对象,而是仅创建一个list对象,并且数组arr的所有索引都指向同一列表对象(list),如图所示。

在这里插入图片描述
方法二,会创建2个单独的列表对象,如下图:
在这里插入图片描述
所以正确的方式就是用方法二,

也就是

rows, cols = (5, 5)
arr2 = [[0 for i in range(cols)] for j in range(rows)]

  
 
  • 1
  • 2

一个 5行5列的二维数组就创建成功:

>>> for row in arr2:
...     print(row)
...
[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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

不过,还没完,还有一点,我们发现ij好像都没使用,所以我们用单下划线_

rows, cols = (5, 5)
arr2 = [[0 for _ in range(cols)] for _ in range(rows)]

  
 
  • 1
  • 2

有时候单个独立下划线是用作一个名字,来表示某个变量是临时的或无关紧要的。

总结

至此,我们终于能够正确创建一个Python的二维数组了。对,就是它:

arr2 = [[0 for _ in range(5)] for _ in range(5)]  # 创建一个正确的5行5列的数组

  
 
  • 1

文章来源: blog.csdn.net,作者:宇宙之一粟,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/yuzhou_1shu/article/details/105755632

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。