Python创建二维数组实例(关于list的一个小坑)

作者:PyLearn 时间:2021-04-29 19:28:13 

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)的使用方法 看看。

来源:http://www.cnblogs.com/PyLearn/archive/2017/11/06/7795552.html

标签:python,list,二维数组
0
投稿

猜你喜欢

  • [JS效果]动画效果打开/关闭/移动层

    2008-04-10 11:42:00
  • ASP表单验证方法总结

    2007-10-06 22:43:00
  • 学习javascript,实现插入排序实现代码

    2023-08-07 10:41:08
  • Python Pygame中精灵和碰撞检测详解

    2021-01-31 05:45:27
  • python提效小工具之统计xmind用例数量(源码)

    2021-11-26 21:42:44
  • python re正则表达式模块(Regular Expression)

    2021-01-26 20:22:26
  • 浅谈web分析

    2008-12-02 15:52:00
  • 十六则Dreamweaver使用快技法

    2009-07-05 18:55:00
  • Js实现仿msn的右下角popup提示窗口

    2007-12-27 20:30:00
  • [翻译]标记语言和样式手册 Chapter 12 CSS布局

    2008-02-13 14:19:00
  • JBuilderX+SQL Server开发hibernate

    2023-06-27 00:30:37
  • javascript动态添加单元格的脚本代码

    2023-09-02 05:21:26
  • 解析SQL Server 2005 溢用之:合并列值

    2009-01-23 14:08:00
  • python读文件逐行处理的示例代码分享

    2023-03-17 03:54:04
  • Javascript基础学习之十个重要问题

    2023-07-14 09:17:52
  • 女装类视觉设计分享

    2009-10-30 18:36:00
  • MySQL Order By索引优化

    2011-01-04 19:56:00
  • 同时安装sql2000和sql2005,经验点滴

    2008-03-04 17:56:00
  • 一文带你搞懂Python中的文件操作

    2023-07-20 14:00:52
  • 微信小程序学习笔记之文件上传、下载操作图文详解

    2023-09-07 21:13:21
  • asp之家 网络编程 m.aspxhome.com