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 01 Python
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
python中使用%与.format格式化文本方法解析
Dec 27 Python
pyhton列表转换为数组的实例
Apr 04 Python
python中yaml配置文件模块的使用详解
Apr 27 Python
python Pexpect 实现输密码 scp 拷贝的方法
Jan 03 Python
python交易记录链的实现过程详解
Jul 03 Python
浅析python 中大括号中括号小括号的区分
Jul 29 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
Sep 05 Python
python通过实例讲解反射机制
Oct 17 Python
Python基于Dlib的人脸识别系统的实现
Feb 26 Python
Python编写冷笑话生成器
Apr 20 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
我的群发邮件程序
2006/10/09 PHP
PHP中的array数组类型分析说明
2010/07/27 PHP
php和javascript之间变量的传递实现代码
2012/12/19 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
PHP图像处理类库MagickWand用法实例分析
2015/05/21 PHP
PHP准确取得服务器IP地址的方法
2015/06/02 PHP
php将一维数组转换为每3个连续值组成的二维数组
2016/05/06 PHP
关于laravel后台模板laravel-admin select框的使用详解
2019/10/03 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
js获取当前页面路径示例讲解
2014/01/08 Javascript
Javascript基础教程之if条件语句
2015/01/18 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
jQuery自定义数值抽奖活动代码
2016/06/11 Javascript
Node.js中多进程模块Cluster的介绍与使用
2017/05/27 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
python判断端口是否打开的实现代码
2013/02/10 Python
python实现音乐下载器
2018/04/15 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
python实现滑雪游戏
2020/02/22 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
Python类class参数self原理解析
2020/11/19 Python
Selenium 配置启动项参数的方法
2020/12/04 Python
如何利用python生成MD5并去重
2020/12/07 Python
python Pexpect模块的使用
2020/12/25 Python
美国猫狗药物和用品网站:PetCareRx
2017/01/05 全球购物
世界上最大的街头服饰网站:Karmaloop
2017/02/04 全球购物
如何开发安全的AJAX应用
2014/03/26 面试题
如何现实servlet的单线程模式
2014/08/05 面试题
大专生自我评价
2014/01/28 职场文书
2014道德模范事迹材料
2014/02/16 职场文书
三八妇女节标语
2014/10/09 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
JS class语法糖的深入剖析
2022/07/07 Javascript