在本教程中,记录下如何在Python编程语言中使用数组模块创建一个数组,切片数组,赋值数组和查找数组等数组操作。
Python不支持传统的数组,就像你在 “C “这样的编程语言中看到的那样,不需要导入一个特定的包。
默认情况下,要想在Python中获得类似数组的支持,可以使用Python列表或集合。
在Python中,列表和数组之间唯一真正的区别是,列表对数据类型没有约束。
对于列表,可以放心使用不同的数据类型。而对于像 “C “这样的数组,数据类型是有约束的,只能使用单一的数据类型。
通常情况下,最好使用Python列表而不是Python数组,因为列表的处理速度更快,通用性更强。然而,如果需要与类型严格的 C 代码接口,它们会很有帮助。
尽管Python可能没有内置对数组的支持,但我们可以使用数组Python模块来实现它们。
本教程将展示如何利用Python中的数组模块来操作数组。
Python中列表和数组的比较
为了展示使用列表和使用数组模块之间的区别,比较两个不同的代码片段。
第二个片段会故意抛出一个错误,以展示实现之间的差异。
Python列表示例
第一个代码片段向你展示了Python列表的样子。
a = ["raspberry", 3.14, 4]
正如你所看到的,通过这段代码,可以在一个列表中使用任何我们想要的数据类型,而不用担心。
Python数组示例
第二个片段向你展示如果尝试用数组模块做同样的事情会发生什么。
import array as arr
a = arr.array('d', "raspberry", 3.14, 4)
如果运行上面的代码,会遇到一个错误。
原因是其中有两个值与预期的 “double”数据类型不同。
在接下来的几节中,向您展示如何在 Python 中使用这个数组模块。
在Python中创建数组
1. 要开始创建一个数组,需要导入数组模块。
import array as arr
在整个教程中,使用as关键字导入数组Python模块。
这样做是为了只需要使用arr来访问模块。
2. 导入了数组模块,现在把它用起来。
要创建一个数组,需要决定你想让它受制于什么数据类型。
使用下表,可以看到每个可能的数据类型的类型代码。
Python数组支持的类型代码列表
Type Code | C Data Type | Python Data Type | Minimum Size in Bytes |
---|---|---|---|
'b' |
signed char | int | 1 |
'B' |
unsigned char | int | 1 |
'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 |
3. 可以使用数组模块.array()函数创建一个数组。
variable = arr.array(TYPE_CODE, [ARRAY])
第一个参数定义了你想在数组中使用的数据类型。对于可能的类型代码列表,请使用上面的表格。
第二个参数定义了数组本身。数组由方括号([ ])定义,每个元素用逗号(,)分隔。
下面是一个在Python中创建一个数组并将其赋值给一个名为a的Python变量的例子。
如何创建一个数组的例子
1. 在这个例子中,假设你想要一个只接受整数的数组。
使用前面的表格,可以看到需要使用类型代码’i’。
在整数数组中,要存储六个值(1、2、4、8、16和32),每个值都要乘以2来计算出下一个数字。
a = arr.array('i', [1, 2, 4, 8, 16, 32])
2. 现在把这个放在一起,可以看到一个简单的Python数组脚本是什么样子的。
这个脚本导入数组模块,然后创建一个存储在变量a中的数组并打印出它的值。
import array as arr
a = arr.array('i', [1, 2, 4, 8, 16, 32])
print(a)
如果要运行这个小片段,会得到以下输出。
array('i', [1, 2, 4, 8, 16, 32])
可以看到数据类型是一个数组,第一个参数定义了存储在其中的数据类型,第二个参数向展示了数组本身。
在Python中访问数组元素
访问数组的元素很简单,只需要知道Python数组中元素的索引即可。
要访问一个数组中的元素,需要使用索引操作符。索引运算符由数组名称旁边的方括号[ ]表示。
arrayName[INDEX POSITION]
对于一个数组,必须把每个单独的值想象成在一个单独编号的单元格中,第一个单元格总是索引0。
这个数字就是所说的数组索引。
Python还有一个可以称之为 “反向索引位置 “的东西。使用它,可以反向读取一个数组。
例如,如果使用索引-1,可以与数组中的最后一个元素交互。
知道了这一点,就可以通过使用数组的索引号轻松访问数组中的每个元素。
例如,如果想访问数组中的数字16,需要做的就是使用变量a,加上方括号([])和元素的索引位置。
在Python数组中访问元素的例子
和本教程中的大多数例子一样,从这个基本的示例数组开始。
import array as arr
a = arr.array('i', [1, 2, 4, 8, 16, 32])
所以在这个例子中,使用索引位置4来访问数字16,因为它是数组中的第4个元素。
print(a[4])
在访问数组中的元素时,必须记住的主要事情是,索引总是从0开始,而不是1。
在Python中对数组进行分片
使用Python,可以通过使用分片操作符(:)从一个数组中选择元素的范围。
[START POSITION]:[END POSITION]
需要注意的是,结束索引位置永远不会作为切片结果的一部分。
例如,如果使用[1:5],实际上是在说1到5,其中索引位置5的数据不包括在结果中。
为了展示Python中的分片操作符是如何工作的,下面是要给示例。
import array as arr
a = arr.array('i', [1, 2, 4, 8, 16, 32])
下面就来运行一下分片运算符的三种不同使用方式。
切片的基本用法
分片运算符最基本的用法是在方括号内自行使用。
print(a[:]) #Beginning to end
当单独使用时,分片运算符只是输出整个数组,因为它没有开始或结束点。
array('i', [1, 2, 4, 8, 16, 32])
将一个数组从起始索引切到结束索引
也可以使用分片操作符从数组的起始位置分片到结束索引位置。
:[END POSITION]
只需要知道要读到的索引位置,并将其添加到分片运算符(:)的右侧。
示例代码
例如,如果只想抓取数组的前三个元素,可以使用下面的方法。
print(a[:3])#Beginning to index position 3
在Python中运行它,可以看到只显示前三个元素(0、1、2位置)。
array('i', [1, 2, 4])
在这个结果中,可以看到,在末端索引位置(索引3)的值不包括在这个输出中。
将一个数组从起始索引切到末端
也可以将一个数组从开始的索引位置切到最后。
[START POSITION]:
从一个位置切到最后一个位置很容易,就像在切片操作符(:)的左侧指定起始索引一样。
示例代码
例如,如果想抓取第3个元素之后的所有元素,使用左边带有3的分片操作符([3:])。
print(a[3:])
从这段Python代码中,应该最终得到以下结果。
array('i', [8, 16, 32])
数组中的每一个元素,都不包括前三个元素(数组索引0到2)。
数组中间的切片
在Python中对数组中间进行切片也非常简单。
[START POSITION]:[END POSITION]
要对数组中的特定范围进行分片,只需要在使用分片(:)运算符时同时指定起始索引位置和结束索引位置。
示例代码
使用这个方法比较简单。比方说,想抓取数组的中间两个元素。
在这个例子中,起始索引是2,结束索引是4。这两个索引将得到数组的中间两个元素。
print(a[2:4))
现在,继续运行这个小片段。
从这段代码中,应该看到样本数组的中间两个元素被返回(4和8)。
array('i', [4, 8])
在Python中改变数组元素
数组是可变的对象,可以修改各个元素。
在 Python 中,甚至可以通过使用 slice 操作符一次改变数组的多个元素。
在本节的例子中,以下面的代码片段来开始每个例子。
import array as arr
a = arr.array('i', [1, 2, 4, 8, 16, 32])
更改单个阵列元素
关于改变数组,首先要学习的是如何修改单个元素。
修改单个元素就像知道它在数组中的位置和你要分配给它的值一样简单。
arrayName[ARRAY INDEX] = NEW VALUE
修改单个元素非常简单,只需要知道要修改的元素的索引位置。
改变数组中各个元素的例子
为了将其付诸实践,使用示例数组,并将第二个元素(索引位置1)改为数字20。
a[1] = 20
正如在上面的代码段中所看到的那样,要改变第二个元素所需要做的就是使用它的索引位置,等号(=),然后最后是分配给它的值。
可以通过使用下面的代码来检查数组的值是否发生了变化。
print(a)
然后应该可以看到修改过的单元素的数组。
array('i', [1, 20, 4, 8, 16, 32])
改变多个数组元素
在Python中,也可以同时改变一个数组中的多个元素。
要做到这一点,需要利用分片操作符,并给分片值分配一个新的数组来替换它们。
arrayName[STARTPOS:ENDPOS] = arr.array('TYPE_CODE', [NEW ARRAY])
使用的数组必须包含相同数量的元素,并且与要替换的元素类型相同。
改变一个数组中的多个元素的例子
为了给大家举个例子,将用数字3、1和4来替换样本数组的前三个元素。
选择前三个元素,使用结束指数为3的分片操作符,例如[:3] 。
然后,需要给该片分配一个新的数组,可以使用在本Python数组教程中前面所学的步骤轻松地创建该数组。
a[:3] = arr.array('i', [3, 1, 4])
这个小片段将用新数据替换前三个元素。
可以用下面的Python代码打印出示例数组的值来验证它的工作。
print(a)
现在应该看到新替换的元素的数组。
a[:3] = arr.array('i', [3, 1, 4])
在Python中向一个数组添加元素
为了能够在Python中向数组添加元素,需要使用两个不同的函数。
这些函数中的第一个叫做.append(NEW ELEMENT)。这个函数可以用来在一个数组的末尾添加一个新元素。
其中第二个函数叫做.extend([NEW ELEMENTS])。当想在一个数组的末尾添加多个新元素时,可以使用这个函数。
像本指南的所有部分一样,使用可靠的示例代码开始以下所有部分。
import array as arr
a = arr.array('i', [1, 2, 4, 8, 16, 32])
使用append()函数添加元素
使用append()函数添加元素很简单。
.append(ELEMENT TO INSERT)
可以在任何已经创建的数组上调用append()函数。这个函数只接受一个参数,就是要添加的元素。
使用append()函数的例子
需要的是一个已经存在的数组,在例子中就是一个变量。
在这个变量中,添加数字64。
a.append(64)
可以通过在a变量上使用print()函数看到新的值已经被添加。
print(a)
现在应该可以看到添加了额外元素的数组的样子了。
array('i', [1, 2, 4, 8, 16, 32, 64])
使用extension()函数添加元素
如果你想同时添加多个元素,需要使用extension()函数。
arrayName.extend([LIST OF ELEMENTS])
和.append()函数一样,这个函数也是数组对象的一部分。对一个已经创建的数组使用这个函数。
使用 extend() 函数的例子
可以很容易地使用extend()函数。需要做的就是向它提供一个要添加的新元素列表。
在这个例子中,继续样本数组模式,并添加以下四个数字。64, 128, 256, 和 1024.
a.extend([64,128,256,1024])
正如所看到的,扩展一个数组就像使用正确的函数和传递一个你想添加的所有值的列表一样简单。
只要确保这些值的数据类型与原值相同即可。
可以通过使用print()函数查看a数组现在的样子。
print(a)
现在应该看到数组的扩展版本。
array('i', [1, 2, 4, 16, 24, 48, 64, 128, 256, 1024])
用Python连接两个数组
在Python中,也可以将两个数组连接在一起。
要将两个数组连接在一起,需要做的就是使用加法运算符+。
array1+array2
为了展示如何在Python中连接两个数组,可以看看下面的例子。
两个数组的连接实例
在这个例子中,使用常用的样本数组a,同时使用它的反面数组b。
import array as arr
a = arr.array('i', [1, 2, 4, 4, 16, 32])
b = arr.array('i', [32, 16, 8, 4, 2, 1])
将把这两个数组连接在一起,并将它们存储在一个名为c的变量中。
因此,可以检查出两个数组组合的结果,打印新变量的值。
c = a + b
print(c)
从结果中可以看出,组合两个数组是非常容易的。
array('i', [1, 2, 4, 8, 16, 32, 32, 16, 8, 4, 2, 1])
从一个数组中删除元素
在本节中,将展示如何从一个数组中删除元素。
在Python中要从一个数组中删除元素,可以使用两个不同的函数。
这些函数中的第一个是.remove()。这个函数用于删除一个项目中第一次出现的指定值。
arrayName.remove(ITEMTOREMOVE)
第二个函数是.pop()。这个函数将返回它要删除的索引的值。
value = arrayName.pop(INDEXTOREMOVE)
在下面的例子中,从以下代码开始。
import array as arr
a = arr.array('i', [4, 2, 4, 8, 16, 32])
这段代码给提供了足够的代码来演示这两个函数在Python中是如何工作的。
.remove()数组函数
使用.remove()函数非常简单。
只需要知道你想从数组中删除的值。
arrayName.remove(ELEMENTDATATOREMOVE)
这个函数将自动搜索数组中的值,并删除第一次出现的值。
.remove()数组函数使用实例
为了展示这种行为,在数组上使用.remove()函数来删除数字4,并打印出修改后的数组。
a.remove(4)
print(a)
从这个结果来看,应该看到数组中的第一个4的值被删除了,但第二个4仍然存在。
array('i', [2, 4, 8, 16, 32])
如果想从数组中删除某个值的所有出现,需要运行这个命令,或者使用类似filter()的函数。
.pop()数组函数
.pop()函数有一些方便的行为。每当删除某个索引时,函数就会返回其值。
value = arrayName.pop(ELEMENTINDEX)
这个函数的参数是可选的。如果没有指定索引,使用-1。
使用-1意味着pop函数将删除数组中的最后一个元素。
.pop()函数返回它所删除的元素的值的方式,如果想处理存储在其中的数据,可以很有用。
使用.pop()数组函数的例子
使用示例数组,将展示函数如何在有参数和无参数的情况下工作。
让使用.pop()函数来删除数组中的第二个元素。
使用print()函数来观察.pop()返回的值
print(a.pop(1))
print(a)
从这个结果来看,可以观察到两点。
第一件事是第二个元素的值被返回了。第二件事是数组现在缺少了被 “pop”的元素。
2
array('i', [4, 4, 8, 16, 32])
现在,如果再次使用.pop()函数,但这次没有参数,可以看到它删除了数组中的最后一个元素。
print(a.pop())
print(a)
现在,再来看看这两个函数的结果。
32
array('i', [4, 4, 8, 16])
正如你所看到的,Python数组中的最后一个元素被删除了,它的值为32。
希望到这里,您现在能够了解如何在 Python 中使用数组。
如果你遇到任何问题或有任何反馈,欢迎在下面留言。
欢迎转载,请留下出处链接:Labno3 » Python数组模块使用指南,创建、切片和赋值