列表算是 Python 中比较常用的一种容器型数据类型,那么什么是列表,列表有什么样的作用致使它在 Python 中这么受欢迎呢?这便是接下来我们要一起讨论的问题。
在不久之前我们讲过变量,我们将数据使用变量保存,但是如果涉及到多组数据仍然源源不断的创建变量进行保存,我们的代码就显得过于臃肿。那么有没有可能一个变量能够保存多个数据呢,答案是肯定的,我们可以先将数据依次放入容器中(这样一个保存有多组数据的容器可以被理解为是一个数据集合体的),再用变量保存这个容器,等需要用到数据时,从容器中提取出即可。
列表,是一个把中括号[]
作为标志、使用逗号分隔元素的容器型数据类型,容器意味着其有存储数据的功能,并且列表中可以存储任意类型的可重复元素。例如这样一个列表:
list_1 = [1, 2, 3, True, False, True, [2, 4, 6]]
如果想要创建一个列表,我们可以使用两种方法:第一种方法我们其实已经进行了编写,就是上述所举例的列表,可以直接遵循规则使用 []
进行列表创建;另一种方法就是使用 Python 内置的 list 方法创建空列表或直接将其他容器变为列表,这其实是一种构造器语法。关于构造器语法,我们后续进行介绍。
list_2 = list()
# []
list_3 = list('abcde')
# ['a', 'b', 'c', 'd', 'e']
我们将数据存放到了列表中,那么应该如何再把数据取出来呢,可以使用索引、切片还有循环遍历。
列表,是一个有序的容器型数据类型,其中的每个元素都有自己指定的位置。
如图所示,索引(也可以叫做下标)分为正向索引和反向索引。如果是正向索引,从左向右索引从0开始递增;如果是反向索引,从右向左索引从-1开始递减。我们可以通过索引得到有序容器中指定位置的元素,但是要注意,千万不要写超出范围的索引。
语法:有序容器[索引]
list_1 = [1, 2, 3, True, False, True, [2, 4, 6]]
# 问题一:获取列表中的第一个True
print(list_1[3], list_1[-4])
# 问题二:写一个超出范围的索引
print(list_1[100])
# 报错:IndexError: list index out of range
切片可以理解为是索引的拓展功能。切片能够从有序容器1中截取出一部分元素组成与有序容器1同类型的有序容器2。
语法:有序容器[start: end: step]
games = ['王者荣耀', '和平精英', '奇迹暖暖', '英雄联盟', '光遇', '炉石传说']
# 1. 得到['王者荣耀', '和平精英']
print(games[0: 2])
print(games[: 2: 1])
# 2. 得到['王者荣耀', '奇迹暖暖', '光遇']
print(games[: 5: 2])
print(games[: -1: 2])
print(games[:: 2])
# 3. 得到['炉石传说', '光遇', '英雄联盟', '奇迹暖暖', '和平精英', '王者荣耀']
print(games[::-1])
# 4. 得到['英雄联盟', '和平精英']
print(games[-3: -6: -2])
print(games[3: 0: -2 ])
列表是容器型数据类型,我们在讲述循环结构时讲过,for-in 循环可以从容器中获取数据,所以通过循环遍历可以提取到列表中的每个元素,对列表的循环遍历可以分为两种,一种是直接遍历,另一种是间接遍历。
list_1 = [1, 2, 3, True, False, True, [2, 4, 6]]
for i in list_1:
print(i)
# 1
# 2
# 3
# True
# False
# True
# [2, 4, 6]
list_1 = [1, 2, 3, True, False, True, [2, 4, 6]]
for i in range(0, len(list_1)):
print(f'{i}-->{list_1[i]}')
# 0-->1
# 1-->2
# 2-->3
# 3-->True
# 4-->False
# 5-->True
# 6-->[2, 4, 6]
大家先把以上内容进行梳理,此部分内容在后续学习中会经常用到,希望大家能时常温故知新,我们先学理论,再进行实操训练。