0.目录
1.遇到的问题
2.创建二维数组的办法
•3.1 直接创建法
•3.2 列表生成式法
•3.3 使用模块numpy创建
1.遇到的问题
今天写Python代码的时候遇到了一个大坑,差点就耽误我交作业了。。。
问题是这样的,我需要创建一个二维数组,如下:
m = n = 3test = [[0] * m] * nprint("test =",test)
输出结果如下:
test = [[0,0],[0,0]]
是不是看起来没有一点问题?
一开始我也是这么觉得的,以为是我其他地方用错了什么函数,结果这么一试:
m = n = 3test = [[0] * m] * nprint("test =",test) test[0][0] = 233print("test =",test)
输出结果如下:
test = [[0,0]]test = [[233,[233,0]]
是不是很惊讶?!
这个问题真的是折磨我一个中午,去网上一搜,官方文档中给出的说明是这样的:
Note also that the copIEs are shallow; nested structures are not copIEd. This often haunts new Python programmers; consIDer:
>>> Lists = [[]] * 3>>> Lists[[],[],[]]>>> Lists[0].append(3)>>> Lists[[3],[3],[3]]
What has happened is that [[]] is a one-element List containing an empty List,so all three elements of [[]] * 3 are (pointers to) this single empty List. Modifying any of the elements of Lists modifIEs this single List. You can create a List of different Lists this way:
>>>>>> Lists = [[] for i in range(3)]>>> Lists[0].append(3)>>> Lists[1].append(5)>>> Lists[2].append(7)>>> Lists[[3],[5],[7]]
也就是说matrix = [array] * 3 *** 作中,只是创建3个指向array的引用,所以一旦array改变,matrix中3个List也会随之改变。
2.创建二维数组的办法
2.1 直接创建法
test = [0,0]]
简单粗暴,不过太麻烦,一般不用。
2.2 列表生成式法
test = [[0 for i in range(m)] for j in range(n)]
学会使用列表生成式,终生受益。不会的可以去列表生成式 - 廖雪峰的官方网站学习。
2.3 使用模块numpy创建
import numpy as nptest = np.zeros((m,n),dtype=np.int)
关于模块numpy.zeros的更多知识,可以去 python中numpy.zeros(np.zeros)的使用方法 看看。
以上这篇Python创建二维数组实例(关于List的一个小坑)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的Python创建二维数组实例(关于list的一个小坑)全部内容,希望文章能够帮你解决Python创建二维数组实例(关于list的一个小坑)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)