前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >正确创建Python二维数组

正确创建Python二维数组

作者头像
宇宙之一粟
发布2020-10-26 10:24:04
2.8K0
发布2020-10-26 10:24:04
举报
文章被收录于专栏:宇宙之_一粟

Java创建二维数组

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

代码语言:javascript
复制
type arrayName[ ][ ];
type [ ][ ]arrayName;

比如:

代码语言:javascript
复制
int [ ][ ]  arr=new  int [5][3]; 

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

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

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

代码语言:javascript
复制
>>> li[][] = [][]
  File "<stdin>", line 1
    li[][] = [][]
       ^
SyntaxError: invalid syntax

抱歉,行不通。

但是可以这样,

代码语言:javascript
复制
>>> li = [[1,2,3], [4,5,6]]
>>> li
[[1, 2, 3], [4, 5, 6]]

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

你认为的Python二维数组

方法一:

代码语言:javascript
复制
>>> rows, cols = (2, 3)
>>> arr = [[0] * cols] * rows
>>> arr
[[0, 0, 0], [0, 0, 0]]

方法二:

代码语言:javascript
复制
>>> arr = [[0 for i in range(cols)] for j in range(rows)]
>>> arr
[[0, 0, 0], [0, 0, 0]]

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

更改一下元素看看

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

代码语言:javascript
复制
# 方法一
>>> rows, cols = (2, 3)
>>> arr = [[0] * cols] * rows
>>> arr[0][0] = 1
>>> for row in arr:
...     print(row)
...
[1, 0, 0]
[1, 0, 0]

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

代码语言:javascript
复制
# 方法二
>>> 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]

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

什么原因呢?

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

我这里就简单解释一下:

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

在这里插入图片描述

方法二,会创建2个单独的列表对象,如下图:

在这里插入图片描述

所以正确的方式就是用方法二,

也就是

代码语言:javascript
复制
rows, cols = (5, 5)
arr2 = [[0 for i in range(cols)] for j in range(rows)]

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

代码语言:javascript
复制
>>> 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]

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

代码语言:javascript
复制
rows, cols = (5, 5)
arr2 = [[0 for _ in range(cols)] for _ in range(rows)]

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

总结

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

代码语言:javascript
复制
arr2 = [[0 for _ in range(5)] for _ in range(5)]  # 创建一个正确的5行5列的数组
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java创建二维数组
  • 创建一个Python二位数组的尴尬
  • 你认为的Python二维数组
    • 方法一:
      • 方法二:
        • 更改一下元素看看
          • 什么原因呢?
          • 总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档