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使用scrapy采集时伪装成HTTP/1.1的方法
Apr 08 Python
从Python的源码浅要剖析Python的内存管理
Apr 16 Python
python实现爬虫下载美女图片
Jul 14 Python
python实现txt文件格式转换为arff格式
May 31 Python
Python二进制串转换为通用字符串的方法
Jul 23 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
Mar 05 Python
python tkinter控件布局项目实例
Nov 04 Python
使用python+whoosh实现全文检索
Dec 09 Python
pytorch如何冻结某层参数的实现
Jan 10 Python
Python类如何定义私有变量
Feb 03 Python
Python列表的深复制和浅复制示例详解
Feb 12 Python
如何用python爬取微博热搜数据并保存
Feb 20 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中上传多个文件的表单设计例子
2014/11/19 PHP
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
PHP 实现文件压缩解压操作的方法
2019/06/14 PHP
Javascript 学习书 推荐
2009/06/13 Javascript
小议Javascript中的this指针
2010/03/18 Javascript
读jQuery之十三 添加事件和删除事件的核心方法
2011/08/23 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
jQuery制作可自定义大小的拼图游戏
2015/03/30 Javascript
Underscore源码分析
2015/12/30 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
input框中的name和id的区别
2016/11/16 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
django中media媒体路径设置的步骤
2019/11/15 Python
Python Celery多队列配置代码实例
2019/11/22 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
Django单元测试中Fixtures的使用方法
2020/02/26 Python
python实现猜数游戏
2020/03/27 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
html5 Canvas画图教程(1)—画图的基本常识
2013/01/09 HTML / CSS
canvas与html5实现视频截图功能示例
2016/12/15 HTML / CSS
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
计算机专业个人求职信范例
2013/09/23 职场文书
母亲节演讲稿
2014/05/27 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
springboot+VUE实现登录注册
2021/05/27 Vue.js
这样写python注释让代码更加的优雅
2021/06/02 Python
MySQL优化及索引解析
2022/03/17 MySQL
CSS子盒子水平和垂直居中的五种方法
2022/07/23 HTML / CSS