在这篇文章中,你将学习如何使用 Python 数组。你将看到如何定义它们,以及常用于对它们进行操作的不同方法。
本篇文章涵盖了你通过导入array module 创建的数组。 我们在此不涉及 NumPy 数组。
表的内容
让我们开始吧!
什么是Python数组?
数组是一种基本的数据结构,也是大多数编程语言的重要组成部分。在 Python 中,它们是能够同时存储多个项目的容器。
具体来说,它们是元素的有序集合,每个值都是相同的数据类型。这是关于Python数组最重要的一点--它们只能保存同一类型的多个项目的序列,这一点需要记住。
Python Lists 和 Python Arrays 之间的区别是什么?
Lists 是 Python 中最常见的数据结构之一,也是该语言的一个核心部分。
Lists 和数组的行为类似。
就像数组一样,列表是一个元素的有序序列。
它们也是可变的,而且大小不固定,这意味着它们可以在程序的整个生命周期内增长和缩小。项目可以被添加和删除,使它们在工作中非常灵活。
然而,列表和数组并不是一回事。
列表存储的是各种数据类型的项目。这意味着一个列表可以同时包含整数、浮点数、字符串或任何其它 Python 数据类型。而数组的情况则不同。
正如在上面一节中提到的,数组只存储相同的单一数据类型的项目。有一些数组只包含整数,或只包含浮点数,或只包含你想使用的任何其它 Python 数据类型。
何时使用 Python 数组
列表是内置于 Python 编程语言中的,而数组不是。数组不是一个内置的数据结构,因此需要通过array module 导入才能使用。
array module 的数组是C语言数组的一个薄的包装,当你想处理同质数据时,它是很有用的。
它们也更紧凑,占用更少的内存和空间,这使得它们与列表相比更有规模效益。
如果你想进行数学计算,那么你应该通过导入 NumPy 包来使用 NumPy 数组。除此之外,你应该在真正需要的时候使用Python数组,因为列表的工作方式类似,而且使用起来更加灵活。
如何在 Python 中使用数组
为了创建 Python 数组,你首先要导入array module ,其中包含所有必要的函数。
有三种方法可以导入array module 。
- 通过在文件的顶部使用
import array。这包括模块array。然后你将继续使用array.array()来创建一个数组。
import array
#how you would create an array
array.array()
- 你可以在文件的顶部使用
import array as arr,而不是单独使用import array,而不必一直输入array.array()。然后,你将通过输入arr.array()来创建一个数组。arr作为一个别名,然后紧随其后的是数组构造函数。
import array as arr
#how you would create an array
arr.array()
- 最后,你也可以使用
from array import *,*,导入所有可用的功能。然后,你将通过单独编写array()构造函数来创建一个数组。
from array import *
#how you would create an array
array()
如何在 Python 中定义数组
一旦你导入了array module ,你就可以继续定义一个 Python 数组。
创建一个数组的一般语法是这样的:
variable_name = array(typecode,[elements])
让我们把它分解一下:
variable_name将是数组的名称。typecode指明在数组中存储什么样的元素。无论是整数数组,还是浮点数组,或者其他任何Python数据类型的数组。记住,所有的元素都应该是相同的数据类型。- 在方括号内,你提到将存储在数组中的
elements,每个元素用逗号隔开。你也可以创建一个空数组,只写variable_name = array(typecode),不写任何元素。
下面是一个类型代码表,在定义Python数组时,不同的类型代码可以与不同的数据类型一起使用。
| 类型代码 | C类型 | Python类型 | 大小 |
|---|---|---|---|
| 'b' | 有符号字符 | int | 1 |
| 'B' | 无符号字符 | int | 1 |
| 'u' | wchar_t | Unicode字符 | 2 |
| 'h' | 有符号短码 | int | 2 |
| 'H' | 无符号短码 | int | 2 |
| 'i' | 有符号int | int | 2 |
| 'I' | 无符号int | int | 2 |
| 'l' | 有符号长 | 符号 | 4 |
| 'L' | 无符号长 | int | 4 |
| 'q' | 有符号长形长形 | 符号 | 8 |
| 'Q' | 无符号长形长形 | int | 8 |
| 'f' | float | 浮点数 | 4 |
| 'd' | 双倍 | 浮点数 | 8 |
把所有的东西联系在一起,这里有一个在Python中如何定义数组的例子:
import array as arr
numbers = arr.array('i',[10,20,30])
print(numbers)
#output
#array('i', [10, 20, 30])
让我们把它分解一下:
- 首先,我们包含了数组模块,在本例中是
import array as arr。 - 然后,我们创建了一个
numbers数组。 - 我们使用
arr.array()因为import array as arr。 - 在
array()构造函数中,我们首先包含了i,表示有符号的整数。有符号的整数意味着数组可以包括正值和负值。无符号整数,例如H,意味着不允许有负值。 - 最后,我们把要存储在数组中的值放在方括号里。
请记住,如果你试图包含不属于i 类型代码的值,即它们不是整数值,你会得到一个错误:
import array as arr
numbers = arr.array('i',[10.0,20,30])
print(numbers)
#output
#Traceback (most recent call last):
# File "/Users/dionysialemonaki/python_articles/demo.py", line 14, in <module>
# numbers = arr.array('i',[10.0,20,30])
#TypeError: 'float' object cannot be interpreted as an integer
在上面的例子中,我试图在数组中包含一个浮点数字。我得到了一个错误,因为这本来只是一个整数数组。
另一种创建数组的方法是如下:
from array import *
#an array of floating point values
numbers = array('d',[10.0,20.0,30.0])
print(numbers)
#output
#array('d', [10.0, 20.0, 30.0])
上面的例子通过from array import * ,导入了array module ,并创建了一个浮点数数据类型的数组numbers 。这意味着它只容纳浮点数,这是用'd' 类型代码指定的。
如何在Python中查找数组的长度
要找出一个数组中包含的元素的确切数量,可以使用内置的len() 方法。
它将返回与你指定的数组中元素总数相等的整数:
import array as arr
numbers = arr.array('i',[10,20,30])
print(len(numbers))
#output
# 3
在上面的例子中,数组包含三个元素 -10, 20, 30 - 所以numbers 的长度是3 。
数组索引和如何在Python中访问数组中的单个项目
数组中的每个项目都有一个特定的地址。通过引用它们的索引号来访问单个项目。
在Python中,以及在所有的编程语言和一般的计算中,索引开始于0 。重要的是要记住,计数是从0 开始的,而不是从1 。
要访问一个元素,首先要写出数组的名称,后面是方括号。在方括号内包括该元素的索引号。
一般的语法是这样的:
array_name[index_value_of_item]
下面是你如何访问数组中的每个元素:
import array as arr
numbers = arr.array('i',[10,20,30])
print(numbers[0]) # gets the 1st element
print(numbers[1]) # gets the 2nd element
print(numbers[2]) # gets the 3rd element
#output
#10
#20
#30
记住,数组中最后一个元素的索引值总是比数组的长度少一个。其中n 是数组的长度,n - 1 将是最后一个项目的索引值。
请注意,你也可以使用负数索引访问每个单独的元素。
使用负数索引,最后一个元素的索引是-1 ,倒数第二的元素的索引是-2 ,以此类推。
下面是你如何使用这种方法获得数组中的每个项目:
import array as arr
numbers = arr.array('i',[10,20,30])
print(numbers[-1]) #gets last item
print(numbers[-2]) #gets second to last item
print(numbers[-3]) #gets first item
#output
#30
#20
#10
如何在Python中搜索一个数组
你可以通过使用index() 方法找出一个元素的索引号。
你把要搜索的元素的值作为参数传给该方法,然后返回该元素的索引号:
import array as arr
numbers = arr.array('i',[10,20,30])
#search for the index of the value 10
print(numbers.index(10))
#output
#0
如果有一个以上的元素具有相同的值,将返回该值的第一个实例的索引。
import array as arr
numbers = arr.array('i',[10,20,30,10,20,30])
#search for the index of the value 10
#will return the index number of the first instance of the value 10
print(numbers.index(10))
#output
#0
如何在Python中循环浏览一个数组
你已经看到了如何访问数组中的每个元素并将其单独打印出来。
你还看到了如何打印数组,使用print() 方法。该方法得到的结果如下:
import array as arr
numbers = arr.array('i',[10,20,30])
print(numbers)
#output
#array('i', [10, 20, 30])
如果你想一个一个地打印每个值呢?
这时循环就派上用场了。你可以在数组中循环,并在每次循环迭代中逐一打印出每个值。
为此,你可以使用一个简单的for 循环:
import array as arr
numbers = arr.array('i',[10,20,30])
for number in numbers:
print(number)
#output
#10
#20
#30
你也可以使用range() 函数,并将len() 方法作为其参数。这将得到与上面相同的结果:
import array as arr
values = arr.array('i',[10,20,30])
#prints each individual value in the array
for value in range(len(values)):
print(values[value])
#output
#10
#20
#30
如何在Python中切分数组
要访问数组内特定的数值范围,可以使用切片操作符,它是一个冒号: 。
当使用切分操作符时,如果你只包含一个值,默认情况下,计数从0 开始。它得到第一个项目,然后一直到你指定的索引号,但不包括索引号:
import array as arr
#original array
numbers = arr.array('i',[10,20,30])
#get the values 10 and 20 only
print(numbers[:2]) #first to second position
#output
#array('i', [10, 20])
当你传递两个数字作为参数时,你指定了一个数字的范围。在这种情况下,计数从范围内第一个数字的位置开始,一直到但不包括第二个数字
import array as arr
#original array
numbers = arr.array('i',[10,20,30])
#get the values 20 and 30 only
print(numbers[1:3]) #second to third position
#output
#rray('i', [20, 30])
在Python中对数组进行操作的方法
数组是可变的,这意味着它们是可改变的。你可以改变不同项的值,添加新的项,或者删除任何你在程序中不想要的项。
让我们看看一些最常用的方法,它们被用来对数组进行操作。
如何改变数组中的一个项目的值
你可以通过对某一特定元素的位置进行排序并为其赋予新的值来改变其价值。
import array as arr
#original array
numbers = arr.array('i',[10,20,30])
#change the first element
#change it from having a value of 10 to having a value of 40
numbers[0] = 40
print(numbers)
#output
#array('i', [40, 20, 30])
如何向数组中添加新的值
要在一个数组的末尾添加一个单一的值,可以使用append() 方法:
import array as arr
#original array
numbers = arr.array('i',[10,20,30])
#add the integer 40 to the end of numbers
numbers.append(40)
print(numbers)
#output
#array('i', [10, 20, 30, 40])
请注意,你添加的新项需要与数组中的其他项具有相同的数据类型。
看看当我试图向一个整数数组中添加一个浮点数时会发生什么。
import array as arr
#original array
numbers = arr.array('i',[10,20,30])
#add the integer 40 to the end of numbers
numbers.append(40.0)
print(numbers)
#output
#Traceback (most recent call last):
# File "/Users/dionysialemonaki/python_articles/demo.py", line 19, in <module>
# numbers.append(40.0)
#TypeError: 'float' object cannot be interpreted as an integer
但是,如果你想在数组的末尾添加一个以上的值,该怎么办?
使用extend() 方法,该方法需要一个可迭代项(如项目列表)作为参数。同样,要确保新的项目都是相同的数据类型。
import array as arr
#original array
numbers = arr.array('i',[10,20,30])
#add the integers 40,50,60 to the end of numbers
#The numbers need to be enclosed in square brackets
numbers.extend([40,50,60])
print(numbers)
#output
#array('i', [10, 20, 30, 40, 50, 60])
如果你不想在数组的末尾添加一个项呢?使用insert() 方法,在一个特定的位置添加一个项。
insert() 函数需要两个参数:新元素将被插入的位置的索引号,以及新元素的值:
import array as arr
#original array
numbers = arr.array('i',[10,20,30])
#add the integer 40 in the first position
#remember indexing starts at 0
numbers.insert(0,40)
print(numbers)
#output
#array('i', [40, 10, 20, 30])
如何从数组中删除一个值
要从一个数组中删除一个元素,请使用remove() 方法,并将值作为该方法的一个参数。
import array as arr
#original array
numbers = arr.array('i',[10,20,30])
numbers.remove(10)
print(numbers)
#output
#array('i', [20, 30])
使用remove() ,只有你作为参数传递的值的第一个实例会被删除。
看看当有多个相同的值时发生了什么。
import array as arr
#original array
numbers = arr.array('i',[10,20,30,10,20])
numbers.remove(10)
print(numbers)
#output
#array('i', [20, 30, 10, 20])
只有第一个出现的10 被删除。
你也可以使用pop() 方法,并指定要删除的元素的位置。
import array as arr
#original array
numbers = arr.array('i',[10,20,30,10,20])
#remove the first instance of 10
numbers.pop(0)
print(numbers)
#output
#array('i', [20, 30, 10, 20])
结论
就这样,你现在知道了如何在Python中使用array module 来创建数组的基本知识。 希望你觉得这个指南对你有帮助。
要学习更多关于Python的知识,请查看freeCodeCamp的Python科学计算认证。
你将从基础知识开始,以一种相互交流和适合初学者的方式学习。你还会在最后建立五个项目,将其付诸实践并帮助巩固你所学的知识。
谢谢你的阅读,祝你编码愉快
参考资料。Python文档