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中的格式化输出用法总结
Jul 28 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
python实现比较文件内容异同
Jun 22 Python
详解Python 数据库的Connection、Cursor两大对象
Jun 25 Python
python读写LMDB文件的方法
Jul 02 Python
python将list转为matrix的方法
Dec 12 Python
使用python实现语音文件的特征提取方法
Jan 09 Python
Django模板获取field的verbose_name实例
May 19 Python
python uuid生成唯一id或str的最简单案例
Jan 13 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
Jan 22 Python
Python读取pdf表格写入excel的方法
Jan 22 Python
Python打包为exe详细教程
May 18 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
Zend的MVC机制使用分析(二)
2013/05/02 PHP
thinkphp 多表 事务详解
2013/06/17 PHP
php教程之phpize使用方法
2014/02/12 PHP
Thinkphp中Create方法深入探究
2014/06/16 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
2017/03/28 PHP
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
2015/03/04 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
2015/12/01 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
Python求解平方根的方法
2015/03/11 Python
python实现web方式logview的方法
2015/08/10 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
2018/02/21 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
Answear匈牙利:来自全球200多个知名时尚品牌
2017/04/21 全球购物
医学生求职自荐信
2013/10/25 职场文书
装潢设计专业推荐信模板
2013/11/26 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
临时用工协议书范本
2014/10/29 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
小学生教师节广播稿
2015/08/19 职场文书
Python 解决空列表.append() 输出为None的问题
2021/05/23 Python