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 相关文章推荐
matplotlib绘图实例演示标记路径
Jan 23 Python
pyspark 读取csv文件创建DataFrame的两种方法
Jun 07 Python
Python面向对象程序设计之继承与多继承用法分析
Jul 13 Python
Numpy 改变数组维度的几种方法小结
Aug 02 Python
python 图像平移和旋转的实例
Jan 10 Python
python操作日志的封装方法(两种方法)
May 23 Python
python中对数据进行各种排序的方法
Jul 02 Python
详解Python3 pandas.merge用法
Sep 05 Python
关于Keras模型可视化教程及关键问题的解决
Jan 24 Python
python实现随机加减法生成器
Feb 24 Python
python实现坦克大战
Apr 24 Python
Django多个app urls配置代码实例
Nov 26 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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
用PHP编写PDF文档生成器
2006/10/09 PHP
php eval函数一句话木马代码
2015/05/21 PHP
PHP模板引擎Smarty自定义变量调解器用法
2016/04/11 PHP
PHP函数积累总结
2019/03/19 PHP
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
深入了解Node.js中的一些特性
2014/09/25 Javascript
Javascript学习笔记之函数篇(六) : 作用域与命名空间
2014/11/23 Javascript
如何动态加载外部Javascript文件
2015/12/02 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
jquery获取input输入框中的值
2019/11/13 jQuery
基于javascript实现碰撞检测
2020/03/12 Javascript
vue中如何自定义右键菜单详解
2020/12/08 Vue.js
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
Python requests设置代理的方法步骤
2020/02/23 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
医院检讨书范文
2014/02/01 职场文书
学生请假条格式
2014/04/11 职场文书
企业安全生产责任书
2014/04/14 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
企业党员一句话承诺
2014/05/30 职场文书
2014最新自愿离婚协议书范本
2014/11/19 职场文书
小学五年级语文上册教学计划
2015/01/22 职场文书
解决numpy和torch数据类型转化的问题
2021/05/23 Python
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫
docker-compose部署Yapi的方法
2022/04/08 Servers
JS前端轻量fabric.js系列物体基类
2022/08/05 Javascript