Python创建二维数组实例(关于list的一个小坑)
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实例1:创建一个登陆模块
- python读取csv文件并把文件放入一个list中脚本实例
- 有关于在Java 类的静态初始化块中创建一个自身实例的问题。
- python实例1:创建一个登陆模块
- 将一个LIST拆分成一个子LIST元素个数为n的二维数组(python实现)
- Python关于socket的一个小型服务器和客户机实例
- python读取csv文件并把文件放入一个list中脚本实例
- 关于“用Python和OpenCV创建一个图片搜索引擎的完整指南”在win7操作系统python3.6环境下的测试探索
- Python中的二维数组实例(list与numpy.array)
- 【Python】一个python实例:给重要的文件创建备份.摘自crossin-python简明教程
- Python使用list的append和pop方法创建堆栈和队列实例代码
- 关于python中二维数组的一个有趣的点
- 《Applications=Code+Markup》读书札记(2)——创建一个简单的 WPF 程序的代码结构及关于 Window 实例位置设置问题
- python实例1:创建一个登陆模块
- python读取csv文件并把文件放入一个list中脚本实例
- 使用事件处理创建一个简单的绘图实例程序 python
- 创建一个数列list-Python
- Python中用list创建二维数组的方法
- python中关于class类中一个实例变量的引用问题
- python 创建一个空dataframe 然后添加行数据的实例