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读取mp3中ID3信息的方法
Mar 05 Python
Python3实现从指定路径查找文件的方法
May 22 Python
Python实现批量读取word中表格信息的方法
Jul 30 Python
Python while 循环使用的简单实例
Jun 08 Python
一篇文章快速了解Python的GIL
Jan 12 Python
Python发送http请求解析返回json的实例
Mar 26 Python
利用Python批量提取Win10锁屏壁纸实战教程
Mar 27 Python
python3基于TCP实现CS架构文件传输
Jul 28 Python
Python csv模块使用方法代码实例
Aug 29 Python
Django用户身份验证完成示例代码
Apr 03 Python
Python实现在线批量美颜功能过程解析
Jun 10 Python
python 实现定时任务的四种方式
Apr 01 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
德生PL660的电路分析和打磨
2021/03/02 无线电
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
html超链接打开窗口大小的方法
2013/03/05 Javascript
JS导出PDF插件的方法(支持中文、图片使用路径)
2016/07/12 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
EasyUI的DataGrid绑定Json数据源的示例代码
2017/12/16 Javascript
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
typescript nodejs 依赖注入实现方法代码详解
2019/07/21 NodeJs
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
解决python读取几千万行的大表内存问题
2018/06/26 Python
python 多线程重启方法
2019/02/18 Python
python多进程读图提取特征存npy
2019/05/21 Python
Python 写入训练日志文件并控制台输出解析
2019/08/13 Python
python中bytes和str类型的区别
2019/10/21 Python
使用 Python 清理收藏夹里已失效的网站
2019/12/03 Python
解决pycharm中导入自己写的.py函数出错问题
2020/02/12 Python
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
日本动漫周边服饰销售网站:Atsuko
2019/12/16 全球购物
校长岗位职责
2013/11/26 职场文书
网页设计个人找工作求职信
2013/11/28 职场文书
敬老文明号事迹材料
2014/01/16 职场文书
感恩母亲节活动方案
2014/03/04 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
《登鹳雀楼》教学反思
2014/04/09 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
企业务虚会发言材料
2014/10/20 职场文书
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android
nginx设置资源请求目录的方式详解
2022/05/30 Servers