Flutter开发App的未来及其在各行业的应用潜力分析
1419
2022-11-19
python创建二维数组(关于list的一个小坑)
1.遇到的问题
问题是这样的,我需要创建一个二维数组,如下:
m = n = 3test = [[0] * m] * nprint("test =", test)
输出结果如下:
test = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
是不是看起来没有一点问题? 一开始我也是这么觉得的,以为是我其他地方用错了什么函数,结果这么一试:
m = n = 3test = [[0] * m] * nprint("test =", test)test[0][0] = 233print("test =", test)
输出结果如下:
test = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]test = [[233, 0, 0], [233, 0, 0], [233, 0, 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:
'''学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:711312441寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!'''>>>>>> 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, 0], [0, 0, 0], [0, 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的更多知识,可以去numpy.zeros(np.zeros)使用方法–python学习笔记31看看。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~