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


Posted in Python onNovember 07, 2017

0.目录

1.遇到的问题

2.创建二维数组的办法

•3.1 直接创建法

•3.2 列表生成式法

•3.3 使用模块numpy创建

1.遇到的问题

今天写Python代码的时候遇到了一个大坑,差点就耽误我交作业了。。。

问题是这样的,我需要创建一个二维数组,如下:

m = n = 3
test = [[0] * m] * n
print("test =", test)

输出结果如下:

test = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

是不是看起来没有一点问题?

一开始我也是这么觉得的,以为是我其他地方用错了什么函数,结果这么一试:

m = n = 3
test = [[0] * m] * n
print("test =", test)

 
test[0][0] = 233
print("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:

>>>
>>> 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 np
test = np.zeros((m, n), dtype=np.int)

关于模块numpy.zeros的更多知识,可以去 python中numpy.zeros(np.zeros)的使用方法 看看。

以上这篇Python创建二维数组实例(关于list的一个小坑)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中模拟enum枚举类型的5种方法分享
Nov 22 Python
详解Python多线程
Nov 14 Python
获取python的list中含有重复值的index方法
Jun 27 Python
python实现排序算法解析
Sep 08 Python
详解PyTorch手写数字识别(MNIST数据集)
Aug 16 Python
Python拆分大型CSV文件代码实例
Oct 07 Python
Python发送邮件封装实现过程详解
May 09 Python
Python装饰器结合递归原理解析
Jul 02 Python
Python Opencv轮廓常用操作代码实例解析
Sep 01 Python
python自动化测试三部曲之unittest框架的实现
Oct 07 Python
python基础之错误和异常处理
Oct 24 Python
Python必备技巧之字符数据操作详解
Mar 23 Python
python 简单备份文件脚本v1.0的实例
Nov 06 #Python
Python如何实现MySQL实例初始化详解
Nov 06 #Python
django rest framework之请求与响应(详解)
Nov 06 #Python
基于python中的TCP及UDP(详解)
Nov 06 #Python
利用Python循环(包括while&for)各种打印九九乘法表的实例
Nov 06 #Python
利用Tkinter和matplotlib两种方式画饼状图的实例
Nov 06 #Python
django实现登录时候输入密码错误5次锁定用户十分钟
Nov 05 #Python
You might like
PHP $_FILES函数详解
2011/03/09 PHP
php操作redis缓存方法分享
2015/06/03 PHP
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
JQuery index()方法使用代码
2010/06/02 Javascript
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
javascript实现日历控件(年月日关闭按钮)
2012/12/12 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
jQuery scroll事件实现监控滚动条分页示例
2014/04/04 Javascript
Window.Open如何在同一个标签页打开
2014/06/20 Javascript
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
js实现当鼠标移到表格上时显示这一格全部内容的代码
2016/06/12 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
Numpy之文件存取的示例代码
2018/08/03 Python
python使用itchat模块给心爱的人每天发天气预报
2019/11/25 Python
PyCharm使用Docker镜像搭建Python开发环境
2019/12/26 Python
pytorch中使用cuda扩展的实现示例
2020/02/12 Python
python mysql自增字段AUTO_INCREMENT值的修改方式
2020/05/18 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
Mybag美国/加拿大:英国奢华包包和名牌手袋网站
2020/02/16 全球购物
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
商务主管岗位职责
2013/12/08 职场文书
2014年情人节活动方案
2014/02/16 职场文书
大学生自我鉴定书
2014/03/24 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
干部作风建设心得体会
2014/10/22 职场文书
龙门石窟导游词
2015/02/02 职场文书
征求意见函
2015/06/05 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js