正确创建Python二维数组
时间:2022-07-28
本文章向大家介绍正确创建Python二维数组,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Java创建二维数组
我门来看看Java创建二维数组的格式:
type arrayName[ ][ ];
type [ ][ ]arrayName;
比如:
int [ ][ ] arr=new int [5][3];
一个5行3列的整数二维数组就创建了。轻松写意...
创建一个Python二位数组的尴尬
也想模仿一下Java,奈何只能:
>>> li[][] = [][]
File "<stdin>", line 1
li[][] = [][]
^
SyntaxError: invalid syntax
抱歉,行不通。
但是可以这样,
>>> li = [[1,2,3], [4,5,6]]
>>> li
[[1, 2, 3], [4, 5, 6]]
这样又太麻烦,我想有没有更好的方法。
你认为的Python二维数组
方法一:
>>> rows, cols = (2, 3)
>>> arr = [[0] * cols] * rows
>>> arr
[[0, 0, 0], [0, 0, 0]]
方法二:
>>> arr = [[0 for i in range(cols)] for j in range(rows)]
>>> arr
[[0, 0, 0], [0, 0, 0]]
两种方式都提供与现在相同的输出。
更改一下元素看看
让我们更改方法一和方法二的数组中的元素:
# 方法一
>>> 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。
# 方法二
>>> 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个单独的列表对象,如下图:
在这里插入图片描述
所以正确的方式就是用方法二,
也就是
rows, cols = (5, 5)
arr2 = [[0 for i in range(cols)] for j in range(rows)]
一个 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]
不过,还没完,还有一点,我们发现i
和j
好像都没使用,所以我们用单下划线_
:
rows, cols = (5, 5)
arr2 = [[0 for _ in range(cols)] for _ in range(rows)]
有时候单个独立下划线是用作一个名字,来表示某个变量是临时的或无关紧要的。
总结
至此,我们终于能够正确创建一个Python的二维数组了。对,就是它:
arr2 = [[0 for _ in range(5)] for _ in range(5)] # 创建一个正确的5行5列的数组
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法