列表结构
列表的介绍— “将喜欢的一切留在身边,这便是我努力的意义”
列表是一种 有序、可变、可重复 的数据结构,在 Python 中的使用频率非常高。
列表的作用是用于存储一系列元素,这些元素在列表中都有对应的位置,叫做 索引,存储的这些元素可以是不同的类型,例如整数、浮点数、字符串等,甚至列表可以储存列表本身。
列表在 Python 中的表示方式是用方括号包裹,不同的元素之间用逗号隔开,示例如下:
# 使用方括号创建列表
1
, 3
, 5
, 7
]'牧旗教程'
, '免费'
, '详细'
, '专业'
]# 列表可以同时由多种数据类型组成,甚至包括列表本身
180
, '浙江大学'
, True
, [1
, 3
], None
]可以看出,列表内部能容纳的元素种类非常多,任何类型的数据结构都可以被存存放在列表中调用。除此之外,列表还具备以下的特征:
特点 | 描述 |
---|---|
有序性 | 列表中的元素按照特定的顺序排列,可以通过位置索引来访问列表中对应的元素。 |
可变性 | 列表内存储的元素是可以进行调整的,可以添加、删除或修改列表中的元素。 |
可重复性 | 列表允许包含相同的元素,可以在列表中存储多个相同的值。 |
多样性 | 列表中的元素可以是任何数据类型,包括数字、字符串、布尔值、其他列表等。 |
通过列表,我们可以轻松完成数据管理,快速完成迭代、排序、过滤等功能。
基本操作
在 Python 中,列表有很多常见的操作,可以用于创建、访问、修改里面存储的元素。关于列表的操作模式主要分为以下几类:
操作方式 | 描述 |
---|---|
查询列表元素 | 使用索引或者切片的方式获取列表元素,直接输出结果或者赋值给新的变量。 |
修改列表元素 | 直接使用索引或者切片将选中的元素重新进行赋值,即可修改相应的元素值。 |
列表新增元素 | 使用 append 、insert 、 extend 函数可以向原有的列表中新增元素。 |
列表删减元素 | 使用 del 关键词或者 pop 、 remove 内置函数可以在原有的列表中删除元素。 |
下面让我们结合示例来对上面的操作方式依次进行学习:
-
查询列表元素
在前面的字符串章节中,我们接触到了 “索引” 和 “切片” 这两个概念,这两个概念同样也适用于列表,让我们来通过一些案例来深入了解:
① 索引
索引用于获取列表中的单个元素,写法是在列表后接上方括号 [ ] 在方括号中填入要提取的元素索引位置,让我们来看示例:
values = ['牧旗教程'
,'免费'
,'专业'
,'详细'
,'靠谱'
]# 选择 values 变量的第一个元素
value1 = values[0
]# 选择 values 变量的第三个元素
value2 = values[2
]# 选择 values 变量的倒数第一个元素
value3 = values[-1
]print
(value1)print
(value2)print
(value3)运行上面的代码,输出结果如下:
牧旗教程
专业
靠谱要注意的是,和字符串的索引一样, 索引的起始位置是从 0 开始的,第一个元素的索引是 0,第二个元素的索引是 1,第三个元素的索引是 2,以此类推。如果索引号是负数,那么 -1 代表倒数第一个元素, -2 代表倒数第二个元素,以此类推。
② 切片
切片是用来选取多个元素的方式,切片的写法是在列表后接方括号,在里面分别填入起始索引、终止索引、步长,中间用冒号隔开,具体写法如下:
list [ start : end : step]其中, step 的意思是每几个元素选择一次,默认的步长是 1 ,也就是每个元素都要选择。
对于列表有以下三点性质要特别注意:
注意事项 描述 切片左闭右开 切片会选择括号最左面的索引,和右面索引值 -1 的索引。 参数可省略 start 不填写默认代表从第一个元素开始选择 ,end 不填写代表切到结尾最后一个元素, step 不填写代表 1 ,也就是每个元素都要选择。 参数可以是负数 如果 start 、end 是负数则代表从后往前开始计算位置,step 是负数代表从右往左进行切片。 让我们通过几个例子来深入了解一下上面提到的几个概念:
# 创建一个列表变量
my_values = ["牧旗教程"
,"专业"
,"免费"
,"详细"
,"面向新手"
,"老少皆宜"
]# 选择第二个元素到第四个元素
value1 = my_values[1
:4
]# 选择第三个元素到倒数第二个元素
value2 = my_values[2
:-1
]# 从第二个元素开始从后往前选择
value3 = my_values[1
::
-1
]# 从第一个元素开始每两个元素选择一次
value4 = my_values[::2
]# 输出结果
print
(value1)print
(value2)print
(value3)print
(value4)结果如下:
['专业', '免费', '详细']
['免费', '详细', '面向新手']
['专业', '牧旗教程']
['牧旗教程', '免费', '面向新手']让我们依次解析一下上面四个有代表性的切片方式:
变量 value1 的切片的起始位置的索引是 1, Python 中的索引 1 代表着第二个元素,终止位置的索引是 4,代表着第五个元素,然后切片的性质是 左闭右开 ,所以左侧从二个元素开始选择,一直选择到右侧第四个元素。
变量 value2 的切片的起始位置的索引是 2,也就是从第三个元素开始选择,终止的索引是 -1,也就是 选择倒数第一个元素 ,同样也是由于左闭右开的性质,最右侧的倒数第一个元素没有被选到,所以需要往前挪一位,也就是选到倒数第二个元素。
变量 value3 的切片的起始位置是索引 1,切片的终止位置是空,也就是切到最后一个元素,但是这次 step 被传入了参数是一个负数,所以是从右向左切的意思,所以也就是从第二个元素切到第一个元素。
变量 value4 的切片中起始位置和终止位置参数都没有填写,所以是从开头切到结尾,由于 step 参数是 2 ,所以是从头切到尾,并且 每两个元素选择一次(每隔一个选一个)。
-
修改列表元素
在上面查询列表元素的教程中,我们在提取到元素后,可以选择赋予新的变量,也可以 重新赋值修改原列表,来看个例子:
# 先定义一个列表
my_value = ['牧旗教程'
,'免费'
,'专业'
,'详细'
]# 使用索引进行单个元素修改列表
my_value[1
] ='这是一个新元素'
print
(my_value)结果如下:
['牧旗教程', '这是一个新元素', '专业', '详细']
可以看出,原来 my_value 列表的第二个元素已经被修改。
同样,也可以使用切片方法对原来的列表进行修改,要注意的是,赋予的值也必须是列表 ,并且元素数量要一致。
# 先定义一个列表
my_value = ['牧旗教程'
,'免费'
,'专业'
,'详细'
]# 使用索切片对多个元素进行修改
my_value[1
:4
] = ['这是第一个新元素'
,'这是第二个新元素'
,'这是第三个新元素'
]print
(my_value)结果如下:
['牧旗教程', '这是第一个新元素', '这是第二个新元素', '这是第三个新元素']
从结果中可以可以看出,my_value 列表的第二个元素到第四个元素已经被修改。
-
列表新增元素
在 Python 中,可以使用以下几种方式对列表新增元素:
名称 写法 描述 append list.append(新元素) 在列表的末尾新增一个元素。 insert list.insert(索引位置,新元素) 在列表的指定位置新增一个元素。 extend list.extend(新元素的组合对象) 在列表的末尾新增一组元素,可以是列表、元组或字符串等。 ① append 函数
使用 append 函数可接受一个参数,该参数是要添加到列表末尾的新元素。
# 先定义一个列表
my_value = ['我爱在'
,'牧旗教程'
,'学习'
]# 直接在结尾新增元素
my_value.append('Python'
)# 输出结果
print
(my_value)结果如下:
['我爱在', '牧旗教程', '学习', 'Python']
② insert 函数
使用 insert 函数可以在列表的任意指定的索引位置前面插入元素:
# 先定义一个列表
my_value = ['我爱在'
,'牧旗教程'
,'学习'
]# 在索引为 2 的位置前面新增元素
my_value.insert(2
,'认真地'
)# 输出结果
print
(my_value)运行代码,结果如下:
['我爱在', '牧旗教程', '认真地', '学习']
③ extend 函数
上面教程中的 append 和 insert 函数都是一次插入一个元素,而 extend 函数则可以一次性插入多个元素。这一组数据可以是列表、元组、字符串等。
# 先定义一个列表
my_value = ['我爱在'
,'牧旗教程'
,'学习'
]# 新增一组元素,注意的是要使用一个组合
my_value.extend(['我的技术'
,'一定会'
,'稳步提升'
])# 输出结果
print
(my_value)运行代码,结果如下:
['我爱在', '牧旗教程', '学习', '我的技术', '一定会', '稳步提升']
要注意的是,如果使用 extend 添加字符串,则会默认把字符串自动切割成列表。来看一个例子:
# 定义一个空列表
my_value = []# 新增一个字符串
my_value.extend("Hello"
)print
(my_value)运行上面的代码,结果如下,可见 Hello 被分割成如下样式:
['H', 'e', 'l', 'l', 'o']
Hello 这个字符串被转化为一个新的组合类型,依次加入到了原来的列表中。
-
列表删除元素
在 Python 中,可以使用以下几种方式对列表删除元素:
名称 写法 描述 del def list[索引] 删除列表中指定索引的元素或整个列表。 pop list.pop(索引位置) 删除列表中指定索引位置的元素。 remove list.remove(元素名称) 删除列表中名称相同的第一个元素。 ① del 语句
使用 del 语句可以删除列表中指定索引位置的元素,如果不加索引则是删除整个列表
# 先定义一个列表
my_list = ["牧旗教程"
,"免费"
,"专业"
,"靠谱"
]# 删除列表中的第二个元素
del
my_list[1
]# 输出结果
print
(my_list)运行代码,结果如下:
['牧旗教程', '专业', '靠谱']
在上面的例子中,如果想删除整个列表,那就可以直接用 del my_list 语句将这个变量删除,此时直接输出 my_list 变量将会报错,因为这个变量已经不存在,需要重新赋值。
另外,清空列表用的是 list.clear 方法来将列表变成一个空列表,不会删除变量。
② pop 函数
pop 函数可以删除列表中指定索引位置的元素。如果不传入参数就默认删除最后一个元素。
# 先定义一个列表
my_list = ["牧旗教程"
,"免费"
,"专业"
,"靠谱"
]# 删除列表中的第二个元素
my_list.pop(1
)# 输出结果
print
(my_list)结果如下,可见列表中的第二个元素 免费,已被删除
['牧旗教程', '专业', '靠谱']
③ remove 函数
remove 函数删除列表中第一个匹配指定值的元素。如果列表中存在多个匹配项,则会只删除第一个匹配项。
# 先定义一个列表
my_list = ["牧旗教程"
,"免费"
,"专业"
,"靠谱"
]# 删除列表中的 “牧旗教程” 元素
my_list.remove('牧旗教程'
)print
(my_list)结果如下,可见 牧旗教程,这个元素被删除:
['免费', '专业', '靠谱']
可以看出,与前几个函数不同的是,remove 不是根据索引位置删除的,而是根据你要删除的元素名称到列表中寻找然后删除。
其他常用的内置函数或关键词
在 Python 中还有很多其他的内置函数或关键词与列表有关,具体如下:
名称 | 写法 | 描述 |
---|---|---|
in | 元素 in list | 判断元素是否属于列表。 |
len | len(list) | 计算列表内的元素数量。 |
count | list.count(元素) | 计算某个元素在列表中出现的次数。 |
index | list.index(元素) | 计算某个元素在列表中出现的位置索引。 |
sort | list.sort() | 对列表中的元素进行排序。 |
让我们通过几个例子来更深入了解一下这些内置函数:
① in 关键词
in 关键词可以用来判断某个元素是否属于列表,返回的结果是布尔值的真或者假:
# 先定义一个列表
"牧旗教程"
, "免费"
, "专业"
, "靠谱"
]# 判断 “专业” 这个词是否是列表中的元素,返回布尔值
"专业"
in
my_list# 输出结果
print
(result)结果如下,输出了布尔值 True
True
可见 “专业” 这个元素存在于 my_list 列表中。
② len 函数
len 函数用来计算列表内元素的数量,也叫做计算列表的长度。
# 先定义一个列表
"牧旗教程"
, "免费"
, "专业"
, "靠谱"
]# 计算列表的元素数量
len
(my_list)# 输出结果
print
(result)结果如下,输出了结果是 4:
4
也就是说 my_list 这个列表中一共有四个元素。
③ count 函数
count 函数用于统计某一个元素在列表中出现的次数,返回的结果是数字类型。
# 先定义一个列表
"苹果"
, "香蕉"
, "桃子"
, "苹果"
, "香蕉"
, "苹果"
, "桃子"
]# 计算列表的元素数量
'苹果'
)# 输出结果
print
(result)结果如下:
3
可见列表中的苹果一共出现了三次。
④ index 函数
index 函数的作用是计算某一个元素在列表中出现的索引位置,用来定位这个元素。
# 先定义一个列表
"牧旗教程"
, "免费"
, "专业"
, "靠谱"
]# 计算列表中 “专业” 这个元素出现的位置
"专业"
)# 输出结果
print
(result)结果如下:
2
可见,专业 这个词在列表中第一次出现的位置索引是 2 ,也就是在列表中的第三的位置。
⑤ sort 函数
sort 的作用是用来对列表内的元素进行排序,在 sort 函数中默认是升序排序,里面的 reverse 参数默认是 False ,如果想倒序排序的话需要传入参数 reverse = True 。
# 定义一个数字格式的列表
2
, 6
, 1
, 4
, 9
, 2
, 6
]# 对列表升序排序
print
(my_list)# 对列表降序排序
True
)print
(my_list)运行代码,结果如下,可以看出列表中的元素分别被升序和降序排列。
[1, 2, 2, 4, 6, 6, 9]
[9, 6, 6, 4, 2, 2, 1]
列表进阶操作
关于列表进阶内容会涉及到后面教程中的一些内容,比如循环、判断等知识点,新手小白可以在学习完后面的相关知识再回来深入了解。
-
列表推导式
列表推导式(List Comprehension)是一种非常简洁的语法,用于创建新的列表或者修改原列表内容或者进行元素变换、筛选和操作。
列表推导式的结构是这样的:
new_list = [表达式for
元素in
可迭代对象if
条件]如果,if 判断语句中带 else 关键词,那么列表推导式的结构需要调整成如下结构:
new_list = [表达式if
条件else
表达式for
元素in
可迭代对象 ]列表推导式的本质是将 if 语句、 for 语句等逻辑语句用更加简单的方式集合在一行代码中,减少代码量。来看一个例子:
假如我有一个字符串数据列表,我想找出其中长度大于 6 的字符串都有哪些,对于这道题如果用常规的解法是这样的:
# 随便定义一个数字列表
my_list = ["apple"
,"banana"
,"orange"
,"grapefruit"
,"watermelon"
]# 创建一个新的空列表
result_list = []# 使用 for语句 结合 if语句 将符合条件的元素放到新列表中
for
iin
my_list :if
len
(i) >6
:result_list.append(i)print
(result_list)结果如下:
['grapefruit', 'watermelon']
在这个例子里,我们对原列表中的每个元素进行循环判断,一旦发现符合条件的元素,就加入到新的空列表中,最后这个新的列表就是我们想要的符合条件的组合。
但其实上面的代码我们可以用列表推导式用一行代码轻松代替:
result_list = [ifor
iin
my_listif
len
(i) >6
]在上面的列表推导式中,程序会先计算 for 循环后面的内容,将循环提取到的元素再进行 if 判断,将返回的结果再在表达式中进行加工,返回加工后的结果。
让我们再来看一个示例,对列表中 y 结尾的英文单词改成把 y 去掉并加上 ies ,其他的单词直接在结尾加 s:
# 定义一个英文单词列表
my_list = ["apple"
,"strawberry"
,"cherry"
,"orange"
]# 使用列表推导式处理上面的列表
result = [i[:-1
] +'ies'
if
i.endswith
('y'
)else
i +'s'
for
iin
my_list ]print
(result)运行上面的代码,输出结果如下:
['apples', 'strawberries', 'cherries', 'oranges']
这就是列表推导式的核心思想:减少代码量
关注公众号【牧旗教程】,回复“更多例题”,获取更多题型进行训练~
您的打赏将帮助维护网站服务器的正常运营,并为作者的后续更新提供更多的动力。
Copyright © 2013-2023 Muqi Course. All Rights Reserved. 牧旗教程 版权所有 京ICP备2023029281号