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用reduce和map把字符串转为数字的方法
Dec 19 Python
Python基于正则表达式实现文件内容替换的方法
Aug 30 Python
Python使用pickle模块存储数据报错解决示例代码
Jan 26 Python
Python实现字符串的逆序 C++字符串逆序算法
May 28 Python
python批量从es取数据的方法(文档数超过10000)
Dec 27 Python
Python3 io文本及原始流I/O工具用法详解
Mar 23 Python
python中JWT用户认证的实现
May 18 Python
Python操作MySQL数据库的示例代码
Jul 13 Python
Python实现GIF图倒放
Jul 16 Python
Python如何将将模块分割成多个文件
Aug 04 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 Python
Python OpenCV实现图形检测示例详解
Apr 08 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
PHP执行zip与rar解压缩方法实现代码
2010/12/05 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
Laravel框架文件上传功能实现方法示例
2019/04/16 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
零基础学JavaScript最新动画教程+iso光盘下载
2008/01/22 Javascript
Prototype Number对象 学习
2009/07/19 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
2017/10/21 Javascript
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
python encode和decode的妙用
2009/09/02 Python
Python+OpenCV人脸检测原理及示例详解
2020/10/19 Python
详解基于django实现的webssh简单例子
2018/07/17 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
python如何解析配置文件并应用到项目中
2019/06/27 Python
Python类中self参数用法详解
2020/02/13 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
css3的过滤效果简单实例
2016/08/03 HTML / CSS
HTML5实现获取地理位置信息并定位功能
2015/04/25 HTML / CSS
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
校园报刊亭的创业计划书
2014/01/02 职场文书
大学活动邀请函
2014/01/28 职场文书
国际贸易专业个人求职信格式
2014/02/02 职场文书
2014年高考决心书
2014/03/11 职场文书
市场总经理岗位职责
2014/04/11 职场文书
六一儿童节标语
2014/10/08 职场文书
MySQL中连接查询和子查询的问题
2021/09/04 MySQL
php修改word的实例方法
2021/11/17 PHP
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技