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 uuid模块使用实例
Apr 08 Python
python使用PyGame播放Midi和Mp3文件的方法
Apr 24 Python
浅谈python数据类型及类型转换
Dec 18 Python
python中字符串变二维数组的实例讲解
Apr 03 Python
Python3用tkinter和PIL实现看图工具
Jun 21 Python
python  Django中的apps.py的目的是什么
Oct 15 Python
使用python获取(宜宾市地震信息)地震信息
Jun 20 Python
Python多继承以及MRO顺序的使用
Nov 11 Python
Django 设置多环境配置文件载入问题
Feb 25 Python
Python爬虫实现自动登录、签到功能的代码
Aug 20 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 Python
python 爬虫如何正确的使用cookie
Oct 27 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
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
PHP7 新特性详细介绍
2016/09/06 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
jQuery Ajax 全解析
2009/02/08 Javascript
YUI的Tab切换实现代码
2010/04/11 Javascript
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
2012/02/27 Javascript
javascript改变position值实现菜单滚动至顶部后固定
2013/01/18 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
ASP.NET jquery ajax传递参数的实例
2016/11/02 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
react 国际化的实现代码示例
2018/09/14 Javascript
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
微信小程序实现收货地址左滑删除
2020/11/18 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
python 判断一个进程是否存在
2009/04/09 Python
python增加矩阵维度的实例讲解
2018/04/04 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
python面向对象 反射原理解析
2019/08/12 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
python 实现两个线程交替执行
2020/05/02 Python
Python新手如何进行闭包时绑定变量操作
2020/05/29 Python
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
德国高尔夫商店:Par71.de
2020/11/29 全球购物
大学生求职自我评价
2014/01/16 职场文书
个人催款函范文
2015/06/24 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python