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实现把数字转换成中文
Jun 29 Python
python 连接sqlite及简单操作
Jun 30 Python
Python使用OpenCV进行标定
May 08 Python
10分钟教你用Python实现微信自动回复功能
Nov 28 Python
利用arcgis的python读取要素的X,Y方法
Dec 22 Python
Python 运行 shell 获取输出结果的实例
Jan 07 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
Mar 29 Python
python字符串判断密码强弱
Mar 18 Python
Python实现多线程下载脚本的示例代码
Apr 03 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
浅谈Python xlwings 读取Excel文件的正确姿势
Feb 26 Python
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
Apr 27 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
中国的第一台收音机
2021/03/01 无线电
php表单提交问题的解决方法
2011/04/12 PHP
解析php中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
jquery批量控制form禁用的代码
2013/08/06 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
JavaScript实现数字数组正序排列的方法
2015/04/06 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
JavaScript获取移动设备型号的实现代码(JS获取手机型号和系统)
2018/03/10 Javascript
react redux入门示例
2018/04/19 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
原生JavaScript之es6中Class的用法分析
2020/02/23 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python入门篇之函数
2014/10/20 Python
Python的面向对象编程方式学习笔记
2016/07/12 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
树莓派4B安装Tensorflow的方法步骤
2020/07/16 Python
Python制作数据预测集成工具(值得收藏)
2020/08/21 Python
实例代码讲解Python 线程池
2020/08/24 Python
Django实现文章详情页面跳转代码实例
2020/09/16 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
大型营销活动计划书
2014/04/28 职场文书
刑事撤诉申请书
2015/05/18 职场文书
2016保送生自荐信范文
2016/01/29 职场文书