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的更多知识,可以去numpy.zeros(np.zeros)使用方法--python学习笔记31看看。

转载于:https://www.cnblogs.com/PyLearn/p/7795552.html

Python创建二维数组(关于list的一个小坑)相关推荐

  1. python 创建二维list,Python创建二维数组(关于list的一个小坑)

    遇到的问题 今天写Python代码的时候遇到了一个大坑,问题是这样的,我需要创建一个二维数组,如下: 输出结果如下: 是不是看起来没有一点问题? 一开始我也是这么觉得的,以为是我其他地方用错了什么函数 ...

  2. C++/java/python 创建二维数组

    创建了一个M×N的二维数组 C++ vector<vector<int>> ans(M,vector<int>(N, 0)); Java int[][] ans = ...

  3. python创建二维数组的方法_Python创建二维数组的正确姿势

    本文原创发布于微信公众号「极客猴」,欢迎关注第一时间获取更多原创分享 List (列表)是 Python 中最基本的数据结构.在用法上,它有点类似数组,因为每个列表都有一个下标,下标从 0 开始.因此 ...

  4. python创建二维数组方法

    #Python# 二维数组的定义.使用的几种方法 通常的困扰 1.先介绍最简单的一种方式 2.再介绍最常见的一种方式 3.最后介绍最暴力直观的一种方式 通常的困扰 之前对Python里面创建.使用二维 ...

  5. python——创建二维数组

    方1: 直接list创建 dp = [[1 for i in range(5)] for j in range(4)] print(dp)#其中5代表列数,4代表行数 dp = [[11111] fo ...

  6. js创建二维数组小坑

    今天在创建一个二维数组时,遇到一个小坑,最后发现是对forEach函数的理解不够深刻导致的bug,特此记录说明. 需求如下:创建一个10 x 10的二维数组 最常规的想法是,进行遍历循环 let it ...

  7. c语言动态生成二维数组,C语言 动态创建二维数组

    /*C语言 如何动态创建二维数组 转化为一维数组申请数组,创建和释放都比较简单 */ #include #include #include #define RANK 10 #define COLUMN ...

  8. python 二维数组 长度_Python创建二维数组的正确姿势

    ↑↑↑点击上方"蓝字",关注"极客猴" 如果你喜欢极客猴,可以把我置顶或加为星标 题图:by watercolor.illustrations from Ins ...

  9. python构建二维数组_Python中创建二维数组

    二维数组 二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式].二维数组又称为矩阵,行列数相等的矩阵称为方阵.对称矩阵a[i] ...

最新文章

  1. 原创:去繁存简,回归本源:微信小程序公开课信息分析《一》
  2. SAP RETAIL 事务代码MP38可以为多个物料执行预测
  3. Hibernate-day04
  4. SpringBoot启动项目时提示:Error:(3, 32) java: 程序包org.springframework.boot不存在
  5. data:image data url 文件上传
  6. Java中函数参数不固定的问题
  7. python爬虫实例100例-python 爬虫实例
  8. Scrapy 发起post请求
  9. 三菱GXWorks2 监视梯形图状态
  10. 二元函数对xy同时求导_《高等数学》微课视频“二元函数的全微分求积”录音...
  11. 电阻温度系数、电阻精度对电阻分压采样电压的影响
  12. RFID工作频率的分类
  13. 超详细linux手动配置单网卡和双网卡(bond0和team)以及DNS,linux网络配置详细说明,ps:使用命令配置
  14. ShaderWeaver使用教程-动画序列帧
  15. Android开发最佳学习路线图
  16. 阿里安全专家BlackHat和DEFCON现场演示:一分钟越狱iOS 11.4
  17. 《中国通史 2016》_12_读后感
  18. MYSQL中,CAST函数的使用规则
  19. ASP+Access的安全隐患及对策(转)
  20. 百度直播iOS SDK平台化输出改造

热门文章

  1. 《 Java并发编程从入门到精通》Thread安全与不安全
  2. 一站式学习Wireshark(三):应用Wireshark IO图形工具分析数据流 | 快课网
  3. ip classless作用
  4. XP农历补丁【绿色版】
  5. 【Vegas原创】outlook发送时,报550 5.7.1 client does not have permissions to send as this sender解决方法...
  6. Web应用程序中(VS2005+SP1)添加App_Code(转)
  7. CentOS 7下安装Nextcloud搭建个人网盘
  8. jsp基础、el技术、jstl标签、javaEE的开发模式
  9. 【Keras学习】常见问题与解答
  10. iOS中UITableViewCell的重用问题解决方案