python

导航

python如何定义二维数组

来源 :中华考试网 2020-09-23

  一维数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的,因此python允许构造多维数组。那么python如何定义二维数组呢?一起来了解下吧:

  >>> A = [0]* 3 * 4

  >>> B = [[0]*3] * 4

  是A还是B呢?当然是B了!还是先输出看一下:

  >>> A

  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

  >>> B

  [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

  不出所料,我们应该按照B = [[0]*3]*4来创建二维数组。

  !!!!!!!!BUT!!!!!!!!!

  当你按照上述方式来创建二维数组的时候,如果你对二维数组中的一个数进行改变,会输出什么呢?我们来试一下,比如我们把第一行的第二个数字改为2,B[0][1] = 2,输出:

  >>> B

  [[0, 2, 0], [0, 2, 0], [0, 2, 0], [0, 2, 0]]

  为什么会是这样?!!

  因为list在Python中是个可变类型啊亲!按照B = [[0]*3]*4来创建二维数组只是4个指向这个空列表元素的引用,修改任何一个元素都会改变整个列表的。

  另一个栗子:

  >>> A = [0]*3

  >>> B = A

  >>> B[0] = 1

  >>> A

  [1, 0, 0]

  坑爹啊!!

  所以,在Python中创建二维数组应该这样写:

  >>> C = [[0]*3 for i in range(4)]

  >>> C

  [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

  >>> C[0][1] = 2

  >>> C

  [[0, 2, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

  所以下次在Python中创建二维数组时候记住了:

  aList = [[0] * cols for i in range(rows)]

  python如何创建二维数组

  创建一个宽度为3,高度为4的数组

  [[0,0,0],

  [0,0,0],

  [0,0,0],

  [0,0,0]]

  myList = [[0] * 3] * 4

  但是当操作myList[0][1] = 1时,发现整个第二列都被赋值,变成

  [[0,1,0],

  [0,1,0],

  [0,1,0],

  [0,1,0]]

  为什么?

  答案:list * n—>n shallow copies of list concatenated, n个list的浅拷贝的连接

  例:

  >>> lists = [[]] * 3

  >>> lists

  [[], [], []]

  >>> lists[0].append(3)

  >>> lists

  [[3], [3], [3]]

  [[]]是一个含有一个空列表元素的列表,所以[[]]*3表示3个指向这个空列表元素的引用,修改任何一个元素都会改变整个列表

  以需要用另外一种方式进行创建多维数组,以免浅拷贝:

  >>> lists = [[] for i in range(3)]

  >>> lists[0].append(3)

  >>> lists[1].append(5)

  >>> lists[2].append(7)

  >>> lists

  [[3], [5], [7]]

  二维数组创建方式修改为:*

  myList = [([0] * 3) for i in range(4)]

分享到

相关资讯