python的数组:列表、数组模块array与第三方库numpy的数组

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库功能强大,在此不可能介绍全面,就不多说了,可参见其它资料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值