介绍
一个 list是Python中的一个数据结构,它是元素的可变或可变的顺序。列表内部的每个元素或值都被称为项目。
列表非常适合在您想要使用多个相关值时使用,这些列表允许您将所属的数据保持在一起,凝聚代码,并在多个值上同时执行相同的方法和操作。
当考虑Python列表和其他数据结构是类型的收藏时,有助于考虑您在计算机上拥有的所有不同的收藏:您的文件范围,您的歌曲播放列表,您的浏览器标记,您的电子邮件,您可以在流媒体服务中访问的视频集和更多。
前提条件
如果您没有设置编程环境,您可以参考本地编程环境的安装和安装指南(https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming-environment-for-python-3)或适用于您的操作系统(Ubuntu, CentOS, Debian 等)的编程环境(https://www.digitalocean.com/community/tutorial_collections/how-to-install-python-3-and-set-up-a-programming-environment)。
严格列表
要开始,让我们创建一个包含字符串数据类型的项目的列表:
<$>[info]
信息: 要跟进本教程中的示例代码,请在本地系统上运行python3
命令,打开Python交互壳。
1sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']
当我们打印清单时,输出响应与我们创建的清单完全相同:
1print(sea_creatures)
1[secondary_label Output]
2['shark', 'cuttlefish', 'squid', 'mantis shrimp', 'anemone']
列表是由较小的部分组成的复合数据类型,并且非常灵活,因为它们可以添加、删除和更改值。当您需要存储大量值或重复值,并且想要能够轻松修改这些值时,您可能需要使用列表数据类型。
在本教程中,我们将通过一些我们可以在Python中使用列表的工作方式。
索引列表
列表中的每个项目都对应一个索引数,即一个整数值,从索引数 `0 开始。
对于sea_creatures
列表,索引分布看起来如下:
'shark' | 'cuttlefish' | 'squid' | 'mantis shrimp' | 'anemone' |
---|---|---|---|---|
0 | 1 | 2 | 3 | 4 |
第一项,字符串鲨鱼
从索引0
开始,列表以索引4
结束。
由于Python列表中的每个项目都有相应的索引号码,我们可以以与其他序列数据类型相同的方式访问和操纵列表。
现在我们可以通过引用其索引号命名列表中的一个单独的项目:
1print(sea_creatures[1])
1[secondary_label Output]
2cuttlefish
此列表的索引号为 0
-4
,如上表所示。
1sea_creatures[0] = 'shark'
2sea_creatures[1] = 'cuttlefish'
3sea_creatures[2] = 'squid'
4sea_creatures[3] = 'mantis shrimp'
5sea_creatures[4] = 'anemone'
如果我们以任何大于4的索引号称名单sea_creatures
,它将被排除在范围之外,因为它将无效:
1print(sea_creatures[18])
1[secondary_label Output]
2IndexError: list index out of range
除了积极的索引数外,我们还可以访问负的索引数列表中的项目,从列表的末尾回数,从-1
开始,这尤其有用,如果我们有一个长的列表,我们想将一个项目指向列表的末尾。
对于相同的列表sea_creatures
,负索引分布看起来像这样:
'shark' | 'cuttlefish' | 'squid' | 'mantis shrimp' | 'anemone' |
---|---|---|---|---|
-5 | -4 | -3 | -2 | -1 |
所以,如果我们想用其负索引号来打印项目squid
,我们可以这样做:
1print(sea_creatures[-3])
1[secondary_label Output]
2squid
我们可以将列表中的字符串项目连接到其他字符串中,使用+
运算符:
1print('Sammy is a ' + sea_creatures[0])
1[secondary_label Output]
2Sammy is a shark
我们能够将字符串项在索引号 0
与字符串 'Sammy is a '
. 我们还可以使用 +
运算符 连接 2 个或多个列表一起。
使用对应列表中的项目的索引号码,我们可以密切访问列表中的每个项目,并与这些项目合作。
更改列表中的项目
我们可以使用索引来更改列表中的项目,设置一个等于不同的值的索引号码,这使我们能够更大地控制列表,因为我们可以修改和更新它们所包含的项目。
如果我们想从cuttlefish
到octopus
的索引1
中的项目的字符串值,我们可以这样做:
1sea_creatures[1] = 'octopus'
现在,当我们打印sea_creatures
时,列表将不同:
1print(sea_creatures)
1[secondary_label Output]
2['shark', 'octopus', 'squid', 'mantis shrimp', 'anemone']
我们还可以通过使用负索引数来改变一个项目的值:
1sea_creatures[-3] = 'blobfish'
2print(sea_creatures)
1[secondary_label Output]
2['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']
现在,blobfish
已经取代了squid
在3
的负索引数(相当于2
的正索引数)。
能够修改列表中的项目使我们能够有效地更改和更新列表。
切割列表
假设我们只想打印sea_creatures
的中间项目,我们可以通过创建一个 ** slice**。
1print(sea_creatures[1:4])
1[secondary_label Output]
2['octopus', 'blobfish', 'mantis shrimp']
在创建片段时,如在[1:4]
中,第一个索引数是片段开始的地方(包括),第二个索引数是片段结束的地方(专属),这就是为什么在我们的示例中,位置上的项目上面,1
,2
和3
是打印的项目。
例如,如果我们要打印列表的前3个项目海洋生物
- 这是鲨鱼
,鱼
,鱼
- 我们可以这样做通过键入:
1print(sea_creatures[:3])
1[secondary_label Output]
2['shark', 'octopus', 'blobfish']
这打印了列表的开始,停止在索引3
之前。
要包括列表末尾的所有项目,我们会扭转语法:
1print(sea_creatures[2:])
1[secondary_label Output]
2['blobfish', 'mantis shrimp', 'anemone']
在切割列表时,我们也可以使用负索引数,类似于正索引数:
1print(sea_creatures[-4:-2])
2print(sea_creatures[-3:])
1[secondary_label Output]
2['octopus', 'blobfish']
3['blobfish', 'mantis shrimp', 'anemone']
我们可以使用的最后一个参数叫做 stride,它指的是在从列表中获取第一个项目后要前进的项目数量。
这个构造的语法是‘list[x:y:z’’,而‘z’是指 step. 让我们做一个更大的列表,然后切断它,并给 step 一个值为 2:
1numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
2
3print(numbers[1:11:2])
1[secondary_label Output]
2[1, 3, 5, 7, 9]
我们的构造数字[1:11:2]
打印了包含1
和排除11
的索引数字之间的值,然后2
的步值告诉程序只打印所有其他项目。
我们可以忽略前两个参数,并将stride 作为一个参数使用语法 list[::z]
:
1print(numbers[::3])
1[secondary_label Output]
2[0, 3, 6, 9, 12]
通过打印数字
列表,步骤设置为3
,只打印了每三个项目:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
切割有积极和消极索引数字的列表和指示步伐为我们提供了操纵列表并获得我们试图实现的输出的控制权。
更改与运营商的列表
运算符可以用来对列表进行修改,我们将使用+
和*
运算符及其复合形式+=
和*=
进行审查。
可以使用+
运算符来连接两个或多个列表:
1sea_creatures = ['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone']
2oceans = ['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']
3
4print(sea_creatures + oceans)
1[secondary_label Output]
2['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']
由于+
运算符可以连接,所以可以用它在列表表格中添加一个项目(或多个)到另一个列表的末尾。
1sea_creatures = sea_creatures + ['yeti crab']
2print (sea_creatures)
1[secondary_label Output]
2['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
您可能需要将目录中的所有文件复制到服务器上,或与朋友共享播放列表 - 在这些情况下,您需要复制数据集。
让我们将海洋生物
列表乘以2和海洋
列表乘以3:
1print(sea_creatures * 2)
2print(oceans * 3)
1[secondary_label Output]
2['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
3['Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic', 'Pacific', 'Atlantic', 'Indian', 'Southern', 'Arctic']
通过使用*
运算符,我们可以按我们指定的次数复制我们的列表。
我们还可以使用+
和*
运算符的复合表格使用分配运算符=
。+=
和*=
运算符可用于快速和自动地填充列表。
让我们在列表表格中添加一个项目到列表 sea_creatures
. 该项目将作为一个位置持有者,我们希望将这个位置持有者项目添加几次。
1for x in range(1,4):
2 sea_creatures += ['fish']
3 print(sea_creatures)
1[secondary_label Output]
2['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish']
3['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish']
4['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab', 'fish', 'fish', 'fish']
对于for loop的每个迭代,一个额外的鱼
列表项目被添加到原始列表海_生物
。
*=
运算器以类似的方式行事:
1sharks = ['shark']
2
3for x in range(1,4):
4 sharks *= 2
5 print(sharks)
1[secondary_label Output]
2['shark', 'shark']
3['shark', 'shark', 'shark', 'shark']
4['shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark']
复合运算符 +
和 *
可用于连接列表和倍增列表. 复合运算符 +=
和 *=
可以连接列表和倍增列表,并将新身份传递到原始列表中。
从列表中删除一个项目
可以使用del
语句从列表中删除项目,从而删除您在列表中指定的索引号码的值。
从sea_creatures
列表中,让我们删除项目octopus
这个项目位于1
的索引位置.要删除项目,我们将使用del
声明,然后调用列表变量和该项目的索引号:
1sea_creatures =['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
2
3del sea_creatures[1]
4print(sea_creatures)
1[secondary_label Output]
2['shark', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
现在在索引位置 1
的项目,字符串 'octopus ',已不在我们的列表
sea_creatures` 中。
假设我们不仅想删除octopus
,还想删除blobfish
和mantis shrimp
。
1sea_creatures =['shark', 'octopus', 'blobfish', 'mantis shrimp', 'anemone', 'yeti crab']
2
3del sea_creatures[1:4]
4print(sea_creatures)
1[secondary_label Output]
2['shark', 'anemone', 'yeti crab']
通过使用del
声明的范围,我们能够在1
指数号(包括)和4
指数号(专属)之间删除项目,在删除3个项目后留下3个项目的列表。
del
语句允许我们从列表数据类型中删除特定项目。
构建一个列表项目列表
列表可以用由列表组成的项目定义,每个分列列表都包含在主列表的较大的分列中:
1sea_names = [['shark', 'octopus', 'squid', 'mantis shrimp'],['Sammy', 'Jesse', 'Drew', 'Jamie']]
列表中的列表称为嵌入列表。
要访问此列表中的一个项目,我们需要使用多个索引:
1print(sea_names[1][0])
2print(sea_names[0][0])
1[secondary_label Output]
2Sammy
3shark
第一个列表,因为它等于一个项目,将有指数号为0,这将是建设中的第一个数字,而第二个列表将有指数号为1。
1sea_names[0][0] = 'shark'
2sea_names[0][1] = 'octopus'
3sea_names[0][2] = 'squid'
4sea_names[0][3] = 'mantis shrimp'
5
6sea_names[1][0] = 'Sammy'
7sea_names[1][1] = 'Jesse'
8sea_names[1][2] = 'Drew'
9sea_names[1][3] = 'Jamie'
在使用列表时,重要的是要记住,要访问相关嵌入列表中的特定项目,您需要引用多个索引号。
结论
列表数据类型是一个灵活的数据类型,可以在整个程序的过程中进行修改,本教程涵盖了列表的基本功能,包括索引,切割,修改和连接列表。
从这里,您可以通过阅读[如何使用列表方法](https://andsky.com/tech/tutorials/how-to-use-list-methods-in-python-3)
和关于列表理解以创建基于现有列表的列表来了解更多关于Python中的列表的工作。