数据存储
假设您开发了一款名为“User Hostile”的计算机游戏,玩家在其中与复杂且不友好的计算机界面竞争。现在您需要编写一个程序来跟踪该游戏在五年内的月销售额。或者假设您需要清点 Hacker Hero Trading Cards。
很快您就会得出结论,您需要的不仅仅是简单的基本数据类型来存储和处理信息。
列表(数组)
为了方便处理大量数据,一组单元格被赋予一个通用名称。这样的一组单元格称为 数组。
数组 –它是一组相同类型的存储单元,并排放置并具有共同的名称。组中的每个单元格都有一个唯一的编号。
使用数组时,您需要 学习如何解决三个任务:
X为数组分配所需大小的内存;
X将数据写入所需的单元格;
X从单元格中读取数据。
Python 中的数组
Python 中没有这样的数组。相反,列表用于存储一组相同类型(但不仅是相同类型)的对象 - list 类型的对象。列表和数组的区别在于列表是一个动态结构,其大小可以在程序执行过程中改变(删除、添加元素)而无需考虑内存管理操作(这是由编译器完成的)。
将来,在分析使用列表的工作时,我们将使用“数组”一词,因为大多数情况下,列表恰恰被用作数组的角色(它们存储相同类型的数据)。
创建数组
创建数组时,会在内存中分配空间(一定数量的单元格)。
1) 可以通过简单地枚举元素来创建数组:
A = [1, 4, 7, 12, 5]
打印(类型(A))
程序会输出
即数组是 list 类型的对象(翻译自英文list )。
2) 数组可以由任何类型的数据组成——整数或实数、字符串
A = [“Vasya”、“Petya”、“Fedya”]
使用数组的一些方法
3) 数组可以被“添加”。
A = [1, 5] + [25, 7]
4) 相同数组的加法可以用乘法代替。所以很容易创建一个填充相同值的数组,如下所示:
A = [0]*10 # 创建一个包含 10 个元素的数组并用零填充
5) 数组总是“知道”你的尺码。 len() 函数用于确定数组的大小。通常数组的大小存储在一个单独的变量中,以便可以轻松更改程序以使用不同的数组大小。
例子
N = 10 # 将数组的大小存储在变量 N 中
A = [0] * N # 创建一个大小为 N 的数组
print(len(A)) # 打印数组的大小
数组的大小可以通过键盘设置。
|
使用数组元素
数组的大部分用处在于它的元素可以单独访问。
这样做的方法是使用索引对元素进行编号。
Index是指向特定数组元素的值。
要引用数组的元素,您必须在方括号中指定数组名称后跟其索引。例如,您可以将值 100 写入索引 1 处的数组元素,如下所示:A[1] = 100 。
你要记住!
Python 中的数组编号从零开始!
(这是先决条件——您必须从头开始。记住这一点尤为重要。)
例子
x = (A[3] + 5) * A[1] #读取A[3]和A[1]的值
A[0] = x + 6 # 将新值写入 A[0]
让我们分析处理数组元素的程序。
<前>
我 = 1
A = [0] * 5 # 创建一个包含 5 个元素的数组
A[0] = 23 # 放入 5 个数组元素中的每一个(索引 0 到 4)
A[1] = 12 # 写入特定值
A[2] = 7
A[3] = 43
A[4] = 51
A[2] = A[i] + 2*A[i-1] + A[2*i] # 将索引为2的元素的值改为表达式的结果
# 因为i=1,所以将变量i的值代入我们得到的表达式
# 下面的表达式 A[2] = A[1] + 2*A[0] + A[2];
打印(A[2] + A[4])
作为运行的结果该程序将索引为 2 和索引 4 的数组元素之和的值等于 116 将出现在屏幕上。从示例中可以看出,我们可以访问数组的任何元素.并使用各种公式计算所需的元素数(例如,在程序 A[i-1] 或 A[2*i] 中)。在这些情况下,将计算元素的索引并取决于 i 的值。
在Python中,可以对数组使用负索引值,从数组末尾开始计数。例如:
A[-1] - 数组的最后一个元素
A[-2] - 倒数第二个元素
等等
我们来分析一下程序。
N=5
A = [0] * N
x=1
打印(A[x - 3]) # 访问元素 A[-2]
print(A[x - 3 + len(A)]) # 访问元素 A[3]
# 这是与 A[-2] 相同的元素
A[x + 4] = A[x] + A[2 * (x + 1)] #将x代入表达式和计算后
# 获取下一行 A[5] = A[1] + A[4]
# A[5] 不存在这样的元素
# 错误 - 数组越界
由于数组是用 5 个元素声明的,因此元素的编号将从 -5 到 4 。我们看到第 6 行的程序引用了一个不存在的元素:A[5] 。
原来是程序越界了。
在这种情况下,程序通常会因 运行时错误而崩溃。
|
遍历数组元素
使用数组时,通常必须同时处理数组的所有元素。
Iterate through elements:循环遍历数组的所有元素,必要时执行一些操作在他们每个人身上。
为此,最常使用带有变量的循环,它从 0 变为 N-1 ,其中 N 是数组的编号元素。
在 N 下,我们将考虑数组的当前大小,即 N = len(A)。
...
对于范围内的我(N):
# 这里我们使用 A[i]
...
在指定的循环中,变量i 将取值 0, 1, 2, ..., N-1。 因此,在循环的每一步,我们都访问数组中编号为 i 的特定元素。
因此,只需描述需要对 A[i] 数组的一个元素执行的操作并将这些操作放在这样的循环中即可。
让我们写一个程序,用第一个N 自然数填充数组,也就是说,在程序结束时,数组的元素应该变得相等
A[0] = 1
A[1] = 2
A[2] = 3
...
A[N - 1] = N
很容易看出模式:数组元素的值必须比元素的索引大 1。
循环看起来像这样
对于范围内的我(N):
A[i] = i + 1
|
列表生成器
Python 语言可以让您简洁可靠地解决许多问题。 让我们列出填充数组的主要可能性。 1)创建和填充数组可以这样写:
A = [i for i in range(N)] # N = 5,数组 A = [0,1,2,3,4]
A = [i*i for i in range(N)] # N = 5,数组 A = [0,1,4,9,16]
for i in range(N) - 遍历从0到N-1的所有i 值。
数组的下一个元素将包含单词 for 之前的值,在第一种情况下为 i ,在第二种情况下 - i*i .
我们使用以下符号得到相同的结果:
<前>
A = list(range(N)) # N = 5,数组 A = [0,1,2,3,4]
2) 可以写入数组的不是所有的值,而是满足特定条件的值。
例子
用 0 到 9 范围内的所有偶数填充数组。
A = [我在范围内(10)
如果我 % 2 == 0]
print(*A) # 数组 A = [0,2,4,6,8]
在这种情况下,您需要了解数组的长度将小于 10。
3) 从键盘用每行一个元素填充一个数组可以通过两种方式完成。
<正文>
N=5
A = [0]*5
对于范围内的我(N):
A[i] = int(输入())
|
<前>
A = [int(input()) for i in range(N)]
# 每次循环重复,
# 输入的字符串被转换
# 为整数(使用 int)
# 并将这个数字添加到数组中
|
表>
4) 用位于同一行的所有元素从键盘填充一个数组有点复杂。您需要读取字符串,将其拆分为元素,然后将每个元素转换为整数
s = input().split()
A = [int(i) for i in s]
或者
A = list(map(int, input().split())) # 内置函数 list()
# 转换序列
# 到可变列表
数组输出
您还可以用不同的方式在屏幕上显示数组。
<正文>
标准方式,用于许多编程语言。 |
这样的循环可以写的短一些。循环的每一步 х 的值都用数组的下一个元素填充。 |
在Python中可以这样写 |
对于范围内的我(len(A)):
print(A[i], end=" ")
|
对于 A 中的 x:
print(x, end="")
|
<前>
打印(*A)
# 在名字前加*号
# 数组意味着
#需要转换
# 将数组转化为一组单独的值
|
表>
|