文章目录
- 【4.1】数据容器:list列表
- 一、数据容器入门
- 二、数据容器:list 列表
- (一)列表的定义
- (二)列表的下标索引
- (三)列表的常用操作
- (1)列表的查询功能
- (2)列表的修改功能
- (四)列表的特点
- 三、列表的循环遍历
- (一)while循环
- (二)for循环
- (三)while和for的对比
【4.1】数据容器:list列表
一、数据容器入门
为什么学习数据容器
如果我想在程序中,记录5名学生的信息,如姓名。
我可以定义5个name变量。但是这样不高级,而且效率低。
name1 = "stu01"
name2 = "stu02"
name3 = "stu03"
name4 = "stu04"
name5 = "stu05"
也可以定义一个数据容器。一个变量即可完成,优雅且高效。
name_list = ["stu01", "stu02", "stu03", "stu04", "stu05"]
print(name_list)
学习数据容器,就是为了批量存储、批量使用多份数据。
数据容器
Python中的数据容器:
一种可以容纳多份数据的数据类型,容纳的每一份数据称之为一个元素。
每一个元素,可以是任意类型的数据,如字符串、数字、布尔等。
数据容器根据特点的不同,如:
1.是否支持重复元素;
2.是否可以修改;
3.是否有序,等等。
分为5类,分别是:
1.列表(list);
2.元组(tuple);
3.字符串(str);
4.集合(set);
5.字典(dict)。
二、数据容器:list 列表
(一)列表的定义
为什么需要列表
一个人的姓名,可以使用一个字符串变量来存储。
如果一个班级100位学生,每个人的姓名都要存储,应该如何写程序?声明100个变量吗?——不。使用列表就可以了,列表一次可以存储多个数据。
列表(list)类型,是数据容器的一类。
列表的定义
基本语法:
# 字面量
[元素1, 元素2, 元素3, 元素4, ...]# 定义变量
变量名称 = [元素1, 元素2, 元素3, 元素4, ...]# 定义空列表(两种方式)
变量名称 = []
变量名称 = list()
列表内的每一个数据,称之为元素。注意:
1.列表以[]
作为标识;
2.列表内的每一个元素之间用","
隔开。
示例:
# 使用[]的方式定义列表
name_list = ["zhangsan", "lisi", "wangwu"]
print(name_list) # ['zhangsan', 'lisi', 'wangwu']
print(type(name_list)) # <class 'list'># 可以存储不同类型的元素
my_list = ["zhangsan", 666, True]
print(my_list) # ['zhangsan', 666, True]
print(type(my_list)) # <class 'list'># 嵌套列表
my_list = [ [1, 2, 3], [4, 5, 6] ]
print(my_list) # [[1, 2, 3], [4, 5, 6]]
print(type(my_list)) # <class 'list'>
注意:列表可以一次存储多个数据,且可以为不同的数据类型,列表支持嵌套(相当于列表中的元素还是个列表)。
(二)列表的下标索引
如何从列表中取出特定位置的数据呢?
我们可以使用:下标索引。
如上图所示,列表中的每一个元素,都有其位置下标索引,从前向后的方向,从0开始,依次递增。
我们只需要按照下标索引,即可取得对应位置的元素。
# 语法: 列表[下标索引]name_list = ["Tom", "Lily", "Rose"]
print(name_list[0]) # Tom
print(name_list[1]) # Lily
print(name_list[2]) # Rose# 错误示范:通过下标索引取数据,一定不要超出范围
print(name_list[3])
或者,可以反向索引,也就是从后向前:从-1开始,依次递减(-1、-2、-3、…)。
# 语法: 列表[下标索引]name_list = ["Tom", "Lily", "Rose"]
print(name_list[-1]) # Rose
print(name_list[-2]) # Lily
print(name_list[-3]) # Tom
如果列表是嵌套的列表,同样支持下标索引。
my_list = [ [1, 2, 3], [4, 5, 6] ]print(my_list[1][1]) # 5
(三)列表的常用操作
列表除了可以:
1.定义;
2.使用下标索引获取值。
以外,列表也提供了一系列功能:
1.插入元素;
2.删除元素;
3.清空列表;
4.修改元素;
5.统计元素个数。
等等功能。这些功能我们都称之为:列表的方法。
方法的概念
函数是一个封装的代码单元,可以提供特定功能。
在Python中,如果将函数定义为类(class)的成员,那么该函数就称之为方法。(面向过程称为函数,面向对象称为方法)
# 函数
def add(x, y):return x + yclass Student:# 方法def add(self, x, y):return x + y
方法和函数功能一样,有传入参数、有返回值,只是方法的使用格式不同。
# 函数的使用
num = add(1, 2)# 方法的使用
stu = Student()
num = stu.add(1, 2)
使用方法,我们需要先获得方法所在的类对象,然后通过类对象.方法
来使用。除此之外,方法与函数没有任何区别。
那么,如果我们想使用列表中定义的相关方法,就需要获取列表对象,然后调用其中定义好的方法即可。
(1)列表的查询功能
- 查找某元素的下标。
功能:查找指定元素在列表的下标,如果找不到,报错ValueError。
# 语法
列表.index(元素)
示例:
mylist = ["zhangsan", "lisi", "wangwu"]# 查找某元素在列表内的下标索引
index = mylist.index("lisi")
print(f"lisi在列表中的下标索引值是:{index}") # lisi在列表中的下标索引值是:1# 如果被查找的元素不存在,则报错
index = mylist.index("hello")
print(f"hello在列表中的下标索引值是:{index}") # ValueError: 'hello' is not in list
- 统计某元素在列表中的数量
# 语法
列表.count(元素)
示例:
mylist = [1, 1, 1, 2, 3]
print(mylist.count(1)) # 3
- 统计列表内总共有多少个元素(即列表长度)
# 语法
len(列表)
可以得到一个int数字,表示列表内的元素数量。
示例:
mylist = [1, 2, 3, 4, 5]
print(len(mylist)) # 5
(2)列表的修改功能
- 修改特定位置(索引)的元素值。
# 语法
列表[下标] = 值
可使用如上语法,直接对指定下标(正向、反向下标均可)的值进行重新赋值(即修改)操作。
示例:
# 正向下标
mylist = [1, 2, 3]
mylist[0] = 5
print(mylist) # [5, 2, 3]# 反向下标
mylist = [1, 2, 3]
mylist[-3] = 5
print(mylist) # [5, 2, 3]
- 插入元素。
# 语法
列表.insert(下标, 元素)
在指定的下标位置,插入指定的元素。
示例:
mylist = [1, 2, 3]
mylist.insert(1, "hello")
print(mylist) # [1, 'hello', 2, 3]
- 追加元素
# 语法
列表.append(元素)# 语法2
列表.extend(其它数据容器)
append
方法,将指定元素(单个),追加到列表的尾部。
extend
方法,将其它数据容器的内容取出,依次追加到列表尾部。
示例:
# 在列表尾部追加单个新元素
mylist = [1, 2, 3]
mylist.append(4)
print(mylist) # [1, 2, 3, 4]# 在列表尾部追加多个新元素
mylist = [1, 2, 3]
mylist.append([4, 5, 6])
print(mylist) # [1, 2, 3, [4, 5, 6]]mylist = [1, 2, 3]
mylist.extend([4, 5, 6])
print(mylist) # [1, 2, 3, 4, 5, 6]
- 删除元素
# 语法1
del 列表[下标]# 语法2
列表.pop(下标) # 有返回值,返回值为被删除的元素
示例:
mylist = [1, 2, 3]# 方式1
del mylist[0]
print(mylist) # [2, 3]# 方式2
mylist.pop(0)
print(mylist) # [3]element = mylist.pop(0)
print(f"删除了{element},删除后列表为:{mylist}") # 删除了3,删除后列表为:[]
- 删除某元素在列表中的第一个匹配项
# 语法
列表.remove(元素)
示例:
mylist = [1, 2, 3, 2, 3]
mylist.remove(2)
print(mylist) # [1, 3, 2, 3]
- 清空列表内容
# 语法
列表.clear()
示例:
mylist = [1, 2, 3]
mylist.clear()
print(mylist) # []
(四)列表的特点
列表有如下特点:
- 可以容纳多个元素(元素个数上限为 2 63 − 1 2^{63}-1 263−1个)
- 可以容纳不同类型的元素
- 数据是有序存储的(有下标序号)
- 允许重复数据存在
- 可以修改(增加或删除元素等)
三、列表的循环遍历
(一)while循环
既然数据容器可以存储多个元素,那么就会有从容器内依次取出元素进行操作的需求。
将容器内的元素依次取出进行处理的行为,称之为:遍历、迭代。
问题:
1.如何遍历列表元素?答:可以使用之前学过的while循环。
2.如何在循环过程中取出列表元素?答:通过列表[下标]
的方式取出。
3.循环条件如何控制?答:定义一个下标变量,从0开始,循环控制条件为下标变量 < 列表长度
。
index = 0
while index < len(列表):元素 = 列表[index]对元素进行处理index += 1
示例:
mylist = ["zhangsan", "lisi", "wangwu"]index = 0
while index < len(mylist):element = mylist[index]print(f"列表的元素:{element}")index += 1
(二)for循环
对比while,for循环更加适合对列表等数据容器进行遍历。
# 语法
for 临时变量 in 数据容器:对临时变量进行处理
表示从容器内,依次取出元素并赋值到临时变量上。
在每一次的循环中,我们可以对临时变量(元素)进行处理。
示例:
mylist = [1, 2, 3, 4, 5]for element in mylist:print(f"列表的元素有:{element}")
(三)while和for的对比
1.在循环控制上
- while循环可以自定循环条件,并自行控制;
- for循环不可以自定循环条件,只可以依次从容器内取出数据。
2.在无限循环上
- while循环可以通过条件控制做到无限循环;
- for循环理论上不可以,因为被遍历的容器内元素肯定不是无限的。
3.在使用场景上
- while循环适用于任何想要循环的场景;
- for循环适用于遍历数据容器的场景,或简单的固定次数循环场景。