python的数组:列表、数组模块array与第三方库numpy的数组
Python 没有内置对数组的支持,若想使用类似其他语言中的数组功能,怎么办?
办法还是比较多的 :
☆Python中提供了列表(list),可以当作数组使用,如:相当于一维数组:listA=[1,2,3,4]
相当于二维数组:listB=[[1,2,3],[4,5,6],[7,8,9]]
关于list见 内置类型 — Python 3.10.6 文档
☆Python提供了array模块,但其只支持一维数组。因而不适合数值运算。array模块需要用import加载。关于array模块见array --- 高效的数值数组 — Python 3.10.6 文档
☆使用第三方扩展库numpy,需要先用pip install numpy安装,再用import加载,关于numpy见 NumPy 中文
python 中的列表(list)
python 中的列表(list)能扮演其他语言中数组的角色(或者说列表与其他语言中的数组有些类似),但是要强大得多。其中一个方面就是,列表没有固定类型的约束。
列表(list)操作:
创建一个列表
只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
list1 = [1, 2, 3, 4, 5 ];
list2 = ['a',1,('a','b')]
list3 = ['张三', '男', '2012-07-22', 2000];
使用下标索引(第一个元素的索引为0)来访问列表中的值,同样你也可以使用方括号的形式截取字符,如list3[0] 就是'张三'
向列表添加元素可用如下方法
1)append()方法默认将元素添加到列表末尾,并且一次只能添加一个元素,如:
list1. append(6) 现在list1就变为[1, 2, 3, 4, 5, 6]
2)extend()方法可以添加多个元素,但是必须以列表的形式添加,如:
list1.extend(['a','b']) 现在list1就变为[1, 2, 3, 4, 5, 6, 'a', 'b']
3)如果想插队的话就需要使用insert(位置索引,元素)方法了,如;
list1.insert(7,70),现在list1就变为[1, 2, 3, 4, 5, 6, 'a', 70,'b']。
从列表中删除元素
1)使用remove()实现指定元素的删除,如:
list1.remove(70) list1就变为[1, 2, 3, 4, 5, 6, 'a', 'b']
2)当需要删除指定位置索引的元素时,使用del 语句https://docs.python.org/zh-cn/3/tutorial/datastructures.html#the-del-statement,如
del list1[6] list1就变为[1, 2, 3, 4, 5, 6, 'b']
del后直接跟列表名可以删除整个列表。
3)pop()方法可以移除索引元素,若不指定索引值作为参数时默认弹出最后一个元素,如:list1.pop(0) list1就变为[2, 3, 4, 5, 6, 'b']
遍历元素
for x in list1:
print(x)
输出:
2
3
4
5
6
b
通过嵌套列表的方式,我们可以模拟多维数组的功能。
相当于二维数组的列表:listB=[[1,2,3],[4,5,6],[7,8,9]]
listB[0][1] 代表2
遍历二维列表,源码如下:
list_2D=[[11,12,13,14],[15,16,17,18],[19,20,21,22]]
for i in list_2D: #每一个列表都独占一行并输出[]
print(i)
print("---------------")
for i in list_2D:
for j in i: #每一个元素都独占一行,不会打印[]
print(j)
运行之:
使用嵌套列表来表示一个三维数组的例子:
array_3d = [
[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
[[10, 11, 12], [13, 14, 15], [16, 17, 18]],
[[19, 20, 21], [22, 23, 24], [25, 26, 27]]
]
这样就创建了一个3x3x3的三维数组,可以通过索引来访问其中的元素,例如 array_3d[1][2][0] 表示访问第二个二维数组的第三个元素的第一个值。
关于列表的操作可参见:
https://docs.python.org/zh-cn/3/library/stdtypes.html#lists
https://docs.python.org/zh-cn/3/tutorial/introduction.html#lists
https://docs.python.org/zh-cn/3/tutorial/datastructures.html#more-on-lists
Python的内置模块array
python的内置模块(也称为标准库)是随着pyhon安装的时候默认自带的库,不需要下载安装的库。用import加载后就可以使用。
array模块定义了一种对象类型,可以紧凑地表示基本类型值的数组:字符、整数、浮点数等。 数组属于序列类型,其行为与列表非常相似,不同之处在于其中存储的对象类型是受限的——元素必须为同一类型。
要使用array,先要import array
array的创建方法如下
array(typecode[, initializer])
typecode 类型代码字符来指示存储何种元素,参见下表,并由可选的 initializer 值进行初始化,该值必须为一个列表、bytes-like object(字节类对象) 或包含正确类型元素的可迭代对象。个可迭代对象来填充元素
Type code | C Type | Python Type | Minimum size in bytes |
'b' | signed char | int | 1 |
'B' | unsigned char | int | 1 |
'u' | wchar_t | Unicode character | 2 |
'h' | signed short | int | 2 |
'H' | unsigned short | int | 2 |
'i' | signed int | int | 2 |
'I' | unsigned int | int | 2 |
'l' | signed long | int | 4 |
'L' | unsigned long | int | 4 |
'q' | signed long long | int | 8 |
'Q' | unsigned long long | int | 8 |
'f' | float | float | 4 |
'd' | double | float | 8 |
# array的创建
int_arr = array.array('i', [1, 2, 3])
str_arr = array.array('u', 'hello')
array的方法和list基本相同,例如append,pop,insert,remove, index等。
也可以遍历元素
for x in int_arr:
print(x)
python内置模块array不支持二维数组。
使用第三方扩展库numpy
numpy 全称为 Numerical Python,是 Python 的一个以矩阵为主的用于科学计算的基础软件包。NumPy 和 Pandas、Matpotlib 经常结合一起使用,所以被人们合称为数据分析三剑客。Numpy 中有功能强大的 ndarray 对象,能创建 N 维的数组,另外还提供很多通用函数,支持对数组的元素进行操作、支持对数组进行算法运算以及提供常用的统计函数。
对于第三方扩展库,需要先用pip install numpy安装,再用import加载。【Python标准库和第三方库简介 https://blog.csdn.net/cnds123/article/details/121167106】
使用第三方扩展库Numpy创建数组有多种方式
利用array()函数方式:
import numpy as np
创建一维数组
nd_one = np.array([1, 2, 3])
创建二维数组
nd_two = np.array([[1, 2, 3], [4, 5, 6]])
使用下标索引(第一个元素的索引为0)来访问列表中的值,如nd_one[1] 就是2,nd_two[1][1]就是5
NumPy 数组的维数称为秩(rank),秩就是轴的数量,即数组的维度,一维数组的秩为 1,二维数组的秩为 2,以此类推。每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。
NumPy之一维数组遍历,示例源码:
import numpy as np
LA=np.array([1,2,3])
for x in np.nditer(LA):
print(x)
运行之:
NumPy之二维数组遍历,示例源码:
import numpy as np
nd_2D = np.array([[1, 2, 3], [4, 5, 6]])
#使用flat属性,返回的是数组的迭代器
for x in nd_2D.flat :
print(x)
print("---------")
#使用nditer函数,可以返回数组的迭代器
for x in np.nditer(nd_2D) :
print(x)
print("---------")
## 二维数组,每次遍历一行,以列表的形式返回一行的元素
for x in nd_2D :
print(x)
运行之:
列表和numpy的数组各有特点,使用时需要了解注意,例如:
numpy库功能强大,在此不可能介绍全面,就不多说了,可参见其它资料。