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之眼花缭乱的运算符
Sep 14 Python
Android应用开发中Action bar编写的入门教程
Feb 26 Python
设计模式中的原型模式在Python程序中的应用示例
Mar 02 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
Aug 15 Python
python编写分类决策树的代码
Dec 21 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
Dec 30 Python
详解js文件通过python访问数据库方法
Mar 03 Python
基于python二叉树的构造和打印例子
Aug 09 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 Python
python中pathlib模块的基本用法与总结
Aug 17 Python
Python制作一个随机抽奖小工具的实现
Jul 07 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 htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
PHP查找与搜索数组元素方法总结
2015/06/12 PHP
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
2010/04/29 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
arguments对象验证函数的参数是否合法
2015/06/26 Javascript
CSS图片响应式 垂直水平居中
2015/08/14 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
vue弹出框组件封装实例代码
2019/10/31 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
2020/07/20 Javascript
小程序组件传值和引入sass的方法(使用vant Weapp组件库)
2020/11/24 Javascript
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
小米旗下精品生活电商平台:小米有品
2018/12/18 全球购物
vue+django实现下载文件的示例
2021/03/24 Vue.js
人力资源求职信
2014/05/25 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
法人身份证明书
2015/06/18 职场文书
大学体育课感想
2015/08/10 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS