返回

合肥博为峰教育

python怎么定义数组

python学习网更新时间:2023-01-10 浏览:138

python怎么定义数组


一、一维数组
1.直接定义
matrix=[0,1,2,3]
2.间接定义
matrix=[0 for i in range(4)]
print(matrix)
输出:
[0, 0, 0, 0]
3.数组乘法
matrix=[0]*5
print(matrix)
输出:
[0, 0, 0, 0, 0]
二、二维数组
1.直接定义(3*2)
matrix=[[0,0],[0,0],[0,0]]
2.间接定义(3*2)
matrix=[[0 for i in range(2)] for i in range(3)]
print(matrix)
输出:
[[0, 0], [0, 0], [0, 0]]
3.数组乘法
matrix=[[0,0]]*5
print(matrix)
输出:
[[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]
Python数组定义的方法
Python中没有数组的数据结构,但列表很像数组,如:
a=[0,1,2]
这时:a[0]=0, a[1]=1, a[[2]=2,但引出一个问题,即如果数组a想定义为0到999怎么办?这时可能通过a = range(0, 1000)实现。或省略为a = range(1000).如果想定义1000长度的a,初始值全为0,则 a = [0 for x in range(0, 1000)]
下面是二维数组的定义:
直接定义:
a=[[1,1],[1,1]]
这里定义了一个2*2的,且初始为0的二维数组。
间接定义:
a=[[0 for x in range(10)] for y in range(10)]
这里定义了10*10初始为0的二维数组。
还有更简单的字义二维数组的方法:
b = [[0]*10]*10
定义10*10初始为0的二维数组。
与a=[[0 for x in range(10)] for y in range(10)]比较:print a==b的结果为True。
但用b的定义方法代替a后,以前的可以正常运行的程序也出错了,经过仔细分析得出区别:
a[0][0]=1时,只有a[0][0]为1,其他全为0。
b[0][0]=1时,a[0][0],a[1][0],只到a[9,0]全部为1。
由此得到大数组中的10个小的一维数据全是一个相同的引用,即指向同一地址。
故 b = [[0]*10]*10并不符合我们常规意义上的二维数组。
同时经过试验:c=[0]*10的定义与c=[0 for x in range(10)]有同样的效果,而没有上面相同引用的问题,估计数组c的定义时是值类型相乘,而前面b的用类型的相乘,因为一维数组是一个引用(借用C#中的值类型和引用类型,不知是否合适)。
python如何定义二维数组
先看一段代码
[py]
array = [0, 0, 0]

matrix = [array*3]
print matrix
## [[0,0,0,0,0,0,0,0,0]][/py]
这段代码其实没有新建一个二维数组
再看一段代码
[py]
array = [0, 0, 0]
matrix = [array] * 3
print matrix
## [[0, 0, 0], [0, 0, 0], [0, 0, 0]][/py]
咋一看这段代码应该创建一个二维数组了
测试一下
[py]
matrix[0][1] = 1
print matrix
## [[0, 1, 0], [0, 1, 0], [0, 1, 0]][/py]
照理matrix[0][1]修改的应该只是二维数组中的一个元素,但是测试结果表明,修改的是每个List的第二个元素。
有问题看文档,然后我找到了The Python Standard Library
其中5.6. Sequence Types是这样描述的:
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也会随之改变。
那如何才能在python中创建一个二维数组呢?
例如创建一个3*3的数组
方法1 直接定义
[py]matrix = [[0, 0, 0], [0, 0, 0], [0, 0, 0]][/py]
方法2 间接定义
matrix = [[0 for i in range(3)] for i in range(3)]


相关资讯

Python操作Excel教程:average函数求平均值的算法
2021-10-30 922
Python操作Excel教程-average函数求平均值...
人工智能和创客教育有什么区别
2022-11-05 881
人工智能和创客教育有什么区别对于人工智能,教育工作者首先要了解和接触这些技术,然后在课堂上介绍给学生。在这个过程中,教师...
怎么用热力图实现Python数据可视化
2021-10-28 749
大数据可视化是计算机科学或深度学习新项目中十分特别的一环。一般,你需要在工程前期开展探究性的数据统计分析(EDA),进而对信息有一定的掌握,并且建立数据可视化的确能够使剖析的目的更清楚...
人工智能在制造业的生产中可以发挥哪些作用
2021-06-12 468
人工智能在制造业的生产中可以发挥的作用共分为7项,分别是:1、预测性和预防性维护;2、提高机器人的效能;3、制造供应链;...
二维密度图实现Python可视化的方法
2021-10-28 451
二维密度图(2D Density Plot)是一维版本号密度图的形象化拓展,相对性于一维版本号,其特点是可以见到有关2个自变量的概率分布函数...
Python的基础语法
2021-11-03 447
编写Paython程序流程以前*对英语的语法有一定的掌握,才可以编写标准的Python程序流程...
Python操作Excel教程:提取Excel工作表的名字并修改的方法
2021-10-30 385
Python操作Excel教程-提取Excel工作表的名字并修改...
怎么运行python
2023-01-10 382
怎么运行python1. 使用Python自带的IDLE在开始--程序--Python2.5(视你安装的版本而不同)中找到IDLE(Python GUI),点击后弹出如下...

相关课程

栏目导航