时间:2021-05-23
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, 0, 0], [0, 0, 0]]是不是看起来没有一点问题?
一开始我也是这么觉得的,以为是我其他地方用错了什么函数,结果这么一试:
输出结果如下:
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:
>>>>>> 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的更多知识,可以去python中numpy.zeros(np.zeros)的使用方法看看。
以上这篇Python创建二维数组实例(关于list的一个小坑)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Java二维数组简单定义与使用方法。分享给大家供大家参考,具体如下:Java的二维数组是先创建一个一维数组,然后该数组的元素再引用另外一个一维数组
使用new创建二维数组方法#includeusingnamespacestd;voidmain(){//用new创建一个二维数组,有两种方法,是等价的//一:i
C/C++动态数组的创建的实例详解在C++语言中,二维动态数组主要使用指针的方法建立,以建立一个整数二维数组为例:#include#include#includ
关于python中的二维数组,主要有list和numpy.array两种。好吧,其实还有matrices,但它必须是2维的,而numpyarrays(ndarr
python中创建指定大小的二维数组,有点像C++中进行动态申请内存创建数组,不过相比较而言,python中更为简单一些。创建n行m列的二维数组:n=2m=3m