Python创建二维数组实例(关于list的一个小坑)

Python创建二维数组实例(关于list的一个小坑),第1张

概述0.目录1.遇到的问题2.创建二维数组的办法•3.1直接创建法•3.2列表生成式法

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的一个小坑)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1201291.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存