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的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
Jun 14 Python
Python numpy 点数组去重的实例
Apr 18 Python
Python实现简单的用户交互方法详解
Sep 25 Python
python绘制热力图heatmap
Mar 23 Python
Python语法分析之字符串格式化
Jun 13 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
Jun 14 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 Python
Python调用钉钉自定义机器人的实现
Jan 03 Python
python异常处理try except过程解析
Feb 03 Python
wxpython自定义下拉列表框过程图解
Feb 14 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
Jun 04 Python
Python jieba结巴分词原理及用法解析
Nov 05 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
MySQL修改密码方法总结
2008/03/25 PHP
php运行出现Call to undefined function curl_init()的解决方法
2010/11/02 PHP
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
详解YII关联查询
2016/01/10 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
基于JQuery的列表拖动排序实现代码
2013/10/01 Javascript
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
nodejs使用http模块发送get与post请求的方法示例
2018/01/08 NodeJs
微信小程序实现即时通信聊天功能的实例代码
2018/08/17 Javascript
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
2018/12/06 NodeJs
微信小程序使用map组件实现解析经纬度功能示例
2019/01/22 Javascript
vue集成chart.js的实现方法
2019/08/20 Javascript
Jquery高级应用Deferred对象原理及使用实例
2020/05/28 jQuery
Python转码问题的解决方法
2008/10/07 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
django站点管理详解
2017/12/12 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
django 快速启动数据库客户端程序的方法示例
2019/08/16 Python
python设置代理和添加镜像源的方法
2020/02/14 Python
python爬虫要用到的库总结
2020/07/28 Python
python 实现倒计时功能(gui界面)
2020/11/11 Python
网页中的电话号码如何实现一键直呼效果_附示例
2016/03/15 HTML / CSS
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
经典演讲稿范文
2013/12/30 职场文书
小学教师师德反思
2014/02/03 职场文书
2014年妇产科工作总结
2014/12/08 职场文书
初中作文评语集锦
2014/12/25 职场文书
餐饮店长岗位职责
2015/04/14 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
创业计划书之酒吧
2019/12/02 职场文书
nginx服务器的下载安装与使用详解
2021/08/02 Servers
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers