数据存储

假设您开发了一款名为“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 个元素声明的,因此元素的编号将从 -54。我们看到第 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) - 遍历从0N-1的所有i值。

数组的下一个元素将包含单词 for 之前的值,在第一种情况下为 i,在第二种情况下 - i*i.

我们使用以下符号得到相同的结果: <前> A = list(range(N)) # N = 5,数组 A = [0,1,2,3,4]
2) 可以写入数组的不是所有的值,而是满足特定条件的值。
 
例子
09 范围内的所有偶数填充数组。 A = [我在范围内(10) 如果我 % 2 == 0] print(*A) # 数组 A = [0,2,4,6,8] 在这种情况下,您需要了解数组的长度将小于 10。 

3) 从键盘用每行一个元素填充一个数组可以通过两种方式完成。
  <正文>

4) 用位于同一行的所有元素从键盘填充一个数组有点复杂。您需要读取字符串,将其拆分为元素,然后将每个元素转换为整数 s = input().split()  A = [int(i) for i in s]  或者 A = list(map(int, input().split())) # 内置函数 list()   # 转换序列   # 到可变列表

数组输出

您还可以用不同的方式在屏幕上显示数组。
 
N=5 A = [0]*5 对于范围内的我(N): A[i] = int(输入()) <前> A = [int(input()) for i in range(N)] # 每次循环重复, # 输入的字符串被转换 # 为整数(使用 int) # 并将这个数字添加到数组中
<正文>

标准方式,用于许多编程语言。 这样的循环可以写的短一些。循环的每一步 х 的值都用数组的下一个元素填充。 在Python中可以这样写
对于范围内的我(len(A)): print(A[i], end=" ") 对于 A 中的 x: print(x, end="") <前> 打印(*A) # 在名字前加*号 # 数组意味着 #需要转换 # 将数组转化为一组单独的值