了解Python3中的列表

来自菜鸟教程
(重定向自了解Python3中的列表
跳转至:导航、​搜索

介绍

list 是 Python 中的一种数据结构,它是一个可变或可变的有序元素序列。 列表中的每个元素或值都称为一个项目。 正如 strings 被定义为引号之间的字符一样,列表是通过在方括号 [ ] 之间具有值来定义的。

当您想要处理许多相关值时,列表非常适合使用。 它们使您能够将属于一起的数据保存在一起,压缩您的代码,并一次对多个值执行相同的方法和操作。

在考虑作为集合类型的 Python 列表和其他数据结构时,考虑计算机上所有不同的集合很有用:文件分类、歌曲播放列表、浏览器书签、电子邮件、视频集合您可以访问流媒体服务等。

先决条件

您应该在您的计算机或服务器上安装 Python 3 并设置编程环境。 如果您没有设置编程环境,您可以参考本地编程环境或服务器上的编程环境适合您的操作的安装和设置指南系统(Ubuntu、CentOS、Debian 等)

字符串列表

首先,让我们创建一个包含字符串数据类型项的列表:

Info: 要跟随本教程中的示例代码,请通过运行 python3 命令在本地系统上打开 Python 交互式 shell。 然后,您可以通过在 >>> 提示符后添加示例来复制、粘贴或编辑示例。


sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']

当我们打印出列表时,输出的响应与我们创建的列表完全相同:

print(sea_creatures)
Output['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']

作为元素的有序序列,列表中的每个项目都可以通过索引单独调用。 列表是由较小部分组成的复合数据类型,并且非常灵活,因为它们可以添加、删除和更改值。 当您需要存储大量值或迭代值,并且希望能够轻松修改这些值时,您可能希望使用列表数据类型。

在本教程中,我们将介绍在 Python 中使用列表的一些方法。

索引列表

列表中的每一项都对应一个索引号,它是一个整数值,从索引号0开始。

对于列表 sea_creatures,索引细分如下所示:

'鲨鱼' '乌贼' '乌贼' '螳螂虾' '海葵'
0 1 2 3 4

第一项,字符串 'shark' 从索引 0 开始,列表以 'anemone' 项的索引 4 结束。

因为 Python 列表中的每个项目都有相应的索引号,所以我们能够以与其他顺序数据类型相同的方式访问和操作列表。

现在我们可以通过引用它的索引号来调用列表的离散项:

print(sea_creatures[1])
Outputcuttlefish

此列表的索引编号范围为 0-4,如上表所示。 因此,要单独调用任何项目,我们将引用如下索引号:

sea_creatures[0] = 'shark'
sea_creatures[1] = 'cuttlefish'
sea_creatures[2] = 'squid'
sea_creatures[3] = 'mantis shrimp'
sea_creatures[4] = 'anemone'

如果我们使用任何大于 4 的索引号调用列表 sea_creatures,它将超出范围,因为它无效:

print(sea_creatures[18])
OutputIndexError: list index out of range

除了正索引号之外,我们还可以通过从列表末尾向后计数,从 -1 开始,访问具有负索引号的列表中的项目。 如果我们有一个很长的列表并且我们想在列表的末尾精确定位一个项目,这将特别有用。

对于同一个列表 sea_creatures,负索引细分如下所示:

'鲨鱼' '乌贼' '乌贼' '螳螂虾' '海葵'
-5 -4 -3 -2 -1

所以,如果我们想通过使用它的负索引号打印出项目 'squid',我们可以这样做:

print(sea_creatures[-3])
Outputsquid

我们可以使用 + 运算符将列表中的字符串项与其他字符串连接:

print('Sammy is a ' + sea_creatures[0])
OutputSammy is a shark

我们能够将索引号 0 处的字符串项与字符串 'Sammy is a ' 连接起来。 我们还可以使用 + 运算符来 将 2 个或多个列表连接在一起

通过与列表中的项目相对应的索引号,我们能够离散地访问列表中的每个项目并使用这些项目。

修改列表中的项目

我们可以使用索引来更改列表中的项目,方法是将索引号设置为不同的值。 这使我们能够更好地控制列表,因为我们能够修改和更新它们包含的项目。

如果我们想将索引 1 处的项目的字符串值从 'cuttlefish' 更改为 'octopus',我们可以这样做:

sea_creatures[1] = 'octopus'

现在当我们打印 sea_creatures 时,列表会有所不同:

print(sea_creatures)
Output['shark', 'octopus', 'squid', 'mantis shrimp', 'anemone']

我们还可以通过使用负索引号来更改项目的值:

sea_creatures[-3] = 'blobfish'
print(sea_creatures)
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']

现在 'blobfish' 已在 -3 的负索引号(对应于 2 的正索引号)处替换了 'squid'

能够修改列表中的项目使我们能够以有效的方式更改和更新列表。

切片列表

我们还可以从列表中调出一些项目。 假设我们只想打印 sea_creatures 的中间项,我们可以通过创建 slice 来实现。 使用切片,我们可以通过创建由冒号 [x:y] 分隔的索引号范围来调用多个值:

print(sea_creatures[1:4])
Output['octopus', 'blobfish', 'mantis shrimp']

创建切片时,如在 [1:4] 中,第一个索引号是切片开始的位置(包括),第二个索引号是切片结束的位置(不包括),这就是为什么在我们上面的示例中的项目在位置,123是打印出来的项目。

如果我们想包含列表的任一端,我们可以省略 list[x:y] 语法中的一个数字。 例如,如果我们想打印列表 sea_creatures 的前 3 个项目——这将是 'shark''octopus''blobfish'——我们可以这样做通过键入:

print(sea_creatures[:3])
Output['shark', 'octopus', 'blobfish']

这打印了列表的开头,在索引 3 之前停止。

要在列表末尾包含所有项目,我们将反转语法:

print(sea_creatures[2:])
Output['blobfish', 'mantis shrimp', 'anemone']

我们还可以在对列表进行切片时使用负索引号,类似于正索引号:

print(sea_creatures[-4:-2])
print(sea_creatures[-3:])
Output['octopus', 'blobfish']
['blobfish', 'mantis shrimp', 'anemone']

我们可以与切片一起使用的最后一个参数称为 stride,它指的是从列表中检索到第一个项目后向前移动的项目数。 到目前为止,我们已经省略了 stride 参数,Python 默认 stride 为 1,以便检索两个索引号之间的每个项目。

此构造的语法是 list[x:y:z],其中 z 指的是步幅。 让我们创建一个更大的列表,然后对其进行切片,并将步幅值设为 2:

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

print(numbers[1:11:2])
Output[1, 3, 5, 7, 9]

我们的构造 numbers[1:11:2] 打印包含 1 和不包括 11 的索引号之间的值,然后 2 的步幅值告诉程序只打印输出其他所有项目。

我们可以省略前两个参数,单独使用 stride 作为参数,语法为 list[::z]

print(numbers[::3])
Output[0, 3, 6, 9, 12]

通过打印出列表 numbers 并将步幅设置为 3,仅打印每三个项目:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, [X74X ]12

用正负索引号切片列表并指示步幅为我们提供了操作列表和接收我们试图实现的输出的控件。

使用运算符修改列表

运算符可用于对列表进行修改。 我们将回顾使用 +* 运算符及其复合形式 +=*=

+ 运算符可用于将两个或多个列表连接在一起:

sea_creatures = ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']
oceans = ['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']

print(sea_creatures + oceans)
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']

因为 + 运算符可以连接,它可以用来将一个(或多个)列表形式的项目添加到另一个列表的末尾。 请记住将项目放在方括号中:

sea_creatures = sea_creatures + ['yeti crab']
print (sea_creatures)
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

* 运算符可用于将列表相乘。 也许您需要将目录中的所有文件复制到服务器上,或者与朋友共享播放列表——在这些情况下,您需要增加数据集合。

让我们将 sea_creatures 列表乘以 2,将 oceans 列表乘以 3:

print(sea_creatures * 2)
print(oceans * 3)
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']

通过使用 * 运算符,我们可以按照我们指定的次数复制我们的列表。

我们还可以将 +* 运算符与赋值运算符 = 一起使用。 +=*= 复合运算符可用于以快速和自动化的方式填充列表。 例如,您可以使用这些运算符使用占位符填充列表,稍后您可以使用用户提供的输入对其进行修改。

让我们以列表形式将一个项目添加到列表 sea_creatures 中。 这个项目将作为一个占位符,我们想多次添加这个占位符项目。 为此,我们将使用 += 运算符和 for 循环

for x in range(1,4):
    sea_creatures += ['fish']
    print(sea_creatures)
Output['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish']
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish']
['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish', 'fish']

对于 for 循环的每次迭代,都会在原始列表 sea_creatures 中添加一个额外的列表项 'fish'

*= 运算符的行为类似:

sharks = ['shark']

for x in range(1,4):
    sharks *= 2
    print(sharks)
Output['shark', 'shark']
['shark', 'shark', 'shark', 'shark']
['shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark']

运算符 +* 可用于连接列表和相乘列表。 复合运算符 +=*= 可以连接列表和相乘列表,并将新标识传递给原始列表。

从列表中删除项目

可以使用 del 语句从列表中删除项目。 这将删除您在列表中指定的索引号处的值。

sea_creatures 列表中,让我们删除项目 'octopus'。 该项目位于1的索引位置。 要删除该项目,我们将使用 del 语句然后调用列表变量和该项目的索引号:

sea_creatures =['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

del sea_creatures[1]
print(sea_creatures)
Output['shark', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

现在索引位置 1 的项目,字符串 'octopus' 不再在我们的列表 sea_creatures 中。

我们还可以使用 del 语句指定范围。 假设我们不仅要删除项目 'octopus',还要删除 'blobfish''mantis shrimp'。 我们可以使用 del 语句调用 sea_creatures 中的范围来完成此操作:

sea_creatures =['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']

del sea_creatures[1:4]
print(sea_creatures)
Output['shark', 'anemone', 'yeti crab']

通过使用带有 del 语句的范围,我们能够删除 1(包括)的索引号和 4(不包括)的索引号之间的项目,在删除 3 个项目后给我们留下 3 个项目的列表。

del 语句允许我们从列表数据类型中删除特定项目。

使用列表项构建列表

列表可以用由列表组成的项目来定义,每个带括号的列表都包含在父列表的大括号内:

sea_names = [['shark', 'octopus', 'squid', 'mantis shrimp'],['Sammy', 'Jesse', 'Drew', 'Jamie']]

列表中的这些列表称为嵌套列表。

要访问此列表中的项目,我们将不得不使用多个索引:

print(sea_names[1][0])
print(sea_names[0][0])
OutputSammy
shark

第一个列表,因为它等于一个项目,所以索引号为 0,这将是构造中的第一个数字,第二个列表的索引号为 1。 在每个内部嵌套列表中都会有单独的索引号,我们将在第二个索引号中调用它:

sea_names[0][0] = 'shark'
sea_names[0][1] = 'octopus'
sea_names[0][2] = 'squid'
sea_names[0][3] = 'mantis shrimp'

sea_names[1][0] = 'Sammy'
sea_names[1][1] = 'Jesse'
sea_names[1][2] = 'Drew'
sea_names[1][3] = 'Jamie'

使用列表列表时,请务必记住,您需要引用多个索引号才能访问相关嵌套列表中的特定项目。

结论

列表数据类型是一种灵活的数据类型,可以在整个程序过程中进行修改。 本教程介绍了列表的基本功能,包括索引、切片、修改和连接列表。

从这里,您可以通过阅读“如何使用列表方法”和列表推导来了解有关在 Python 中使用列表的更多信息,以基于现有列表创建列表。 要了解有关数据类型的更多信息,您可以阅读我们的“了解数据类型”教程。