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实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
pandas object格式转float64格式的方法
Apr 10 Python
快速解决PyCharm无法引用matplotlib的问题
May 24 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
Apr 29 Python
python求加权平均值的实例(附纯python写法)
Aug 22 Python
如何使用python传入不确定个数参数
Feb 18 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
May 16 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
May 20 Python
python 如何上传包到pypi
Dec 24 Python
Python爬虫后获取重定向url的两种方法
Jan 19 Python
解决pycharm修改代码后第一次运行不生效的问题
Feb 06 Python
python实现进度条的多种实现
Apr 29 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手册及PHP编程标准
2006/12/17 PHP
基于php判断客户端类型
2016/10/14 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
node.js中的path.dirname方法使用说明
2014/12/09 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
实现高性能javascript的注意事项
2019/05/27 Javascript
Layui带搜索的下拉框的使用以及动态数据绑定方法
2019/09/28 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
[01:01:18]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#2COL VS LGD
2016/03/03 DOTA
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
python中xrange和range的区别
2014/05/13 Python
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
Python守护线程用法实例
2017/06/23 Python
Python下载网络文本数据到本地内存的四种实现方法示例
2018/02/05 Python
tensorflow输出权重值和偏差的方法
2018/02/10 Python
使用pandas中的DataFrame数据绘制柱状图的方法
2018/04/10 Python
python 读取DICOM头文件的实例
2018/05/07 Python
Python实现的拉格朗日插值法示例
2019/01/08 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
python requests使用socks5的例子
2019/07/25 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
Bobbi Brown芭比波朗美国官网:化妆师专业彩妆保养品品牌
2016/08/18 全球购物
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
应届生的求职推荐信范文
2013/11/30 职场文书
毕业生求职自荐信怎么写
2014/01/08 职场文书
建设投标担保书
2014/05/13 职场文书
介绍信格式
2015/01/30 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
Java 死锁解决方案
2022/05/11 Java/Android