Python中如何定义二维数组

小知识点随手记录…

Numpy

或许你会说用numpy中的数组不就可以了,想定义几维就几维,没错numpy确实方便很多。

1
2
3
4
5
>>> import numpy
>>> a = numpy.zeros((2,3))
>>> a
array([[0., 0., 0.],
[0., 0., 0.]])

但如果不用numpy呢?

List

有人会说可以定义一个二维列表代替二维数组呗。

1. 错误方式

一开始一定会有人这样定义

1
2
3
4
>>> a = [[0]*3]*2
>>> a
[[0, 0, 0], [0, 0, 0]]
>>>

看是不是成功了,但当我们修改其中的某个值的时候,就会发现奇怪的地方

1
2
3
4
>>> a[0][0] = 1
>>> a
[[1, 0, 0], [1, 0, 0]]
>>>

特么的怎么连a[1][0]也跟着变成1了,因为上面的定义方式等价于:

1
2
3
4
5
6
7
8
9
>>> temp_list = [0] * 3
>>> a = [temp_list, temp_list]
>>> a
[[0, 0, 0], [0, 0, 0]]
>>> temp_list[0] = 1
>>> temp_list
[1, 0, 0]
>>> a
[[1, 0, 0], [1, 0, 0]]

所以这么用list定义二维数组的方法是错的,那么正确的方式应该怎么做呢?

2. 正确方式

我们可以用for来定义二维数组。

1
2
3
4
5
6
>>> arra = [ [0 for i in range(3)] for i in range(2)]
>>> arra
[[0, 0, 0], [0, 0, 0]]
>>> arra[0][0] = 1
>>> arra
[[1, 0, 0], [0, 0, 0]]

可以看到这样做就没有上面的错误出现了。

Mac下命令行版本的Anaconda安装及常用命令 LeetCode DAY 3 (5)
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×