python中list*n生成多维数组与for循环生成多维数组的区别说明
作者:shangyj17
这篇文章主要介绍了python中list*n生成多维数组与for循环生成多维数组的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
list*n生成多维数组与for循环生成多维数组的区别
本文主要介绍生成二维数组的方法,同时解释使用list * n 方式所存在的问题。
1.从一个问题说起
先看一段代码:
list0 = [1,2,3] list1 = [list0] * 3 print('list1 is :',list1) list1[0][0] = 999 print('new list1 is :',list1)
结果:
程序希望通过list * n 方式的方式生成一个初始的二维数组,并对其中部分值进行修改,从而产生我们希望得到的数组。
但是,当我们修改[0][0]位置的数值后,发现[1][0],[2][0]位置的数字也变成了999
原因是,当我们使用list * n 方式的时候,采用的是浅拷贝,list1[0],list1[1],list1[2]其实都是list0的浅拷贝。
当我们在上面程序中,加入下列代码:
print('list0 is ',list0) print(list0 is list1[0]) print(list1[0] is list1[1])
list0的值也随之改动了,并且,通过程序判定,list0,list1[0],list[1]其实都是一个列表。
2.正确的方式
list0 = [(i + 1) for i in range(3)] list2 = [[(i + 1) for i in range(3)] for _ in range(3) ] print('list2 is :',list2) list2[0][0] = 999 print('new list2 is :',list2) print('list0 is ',list0) print(list0 is list2[0]) print(list2[0] is list2[1])
如何动态生成多维数组
多维数组其实就是多个一维数组的嵌套,Python中有原生的list,类似一个动态数组。
所以动态生成多维数组的思想就是在list中动态嵌套添加list。
下面代码生成一个一个3×3×2的三维数组
# coding:utf-8 # 使用Python3中的print函数 from __future__ import print_function arr = [] # 基本思想是在list中动态添加list,每个list可以嵌套,这样就可以形成多维数组了 # arr中保存的而是row的集合,row中保存的是col的集合 # 这是一个3×3×2的三维数组 for i in range(3): row = [] for j in range(3): col = [] col.append(i + j) col.append(i * j) row.append(col) arr.append(row) print(arr) print("Output Result:") for i in range(3): for j in range(3): for k in range(2): print('[', end='') print(i, end=', ') print(j, end=', ') print(k, end='] = ') print(arr[i][j][k])
运行结果:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。