原创:公众号 数据说话
为什么学习数据容器
思考一个问题:如果我想要在程序中,记录5名学生的信息,如姓名。
最好的方法是不是简单的定义5个字符串变量就可以了
name1="王丽红"
name2="周杰轮"
name3="林俊节"
name4="张学油"
name5="刘德滑"
尽管这种方式可以满足我们的需求,但是写起来手的略显有点繁琐呀,我们只是5名学生信息,那如果说是50名,500名呢,难道我们真的要定义500个变量吗,那肯定是不现实的,那所以我们这种写法虽然能够实现,但是他不高级且低效,那为了实现这个需求呢,我们就可以通过,数据容器来去实现它了。
接下来用一个变量完成:
namelist = ["王丽红","周杰轮","林俊节","张学油","刘德滑"]
这个代码里面,定义了一个新的数据结构,这个是我们没有见过的,那这就是数据容器。
可以看到,这段代码一次性记录了5份数据,并将这5份数据保存在一个变量中。因此,当我们编写代码时,我们可以轻松地使用一个变量来记录多个数据,即使我们需要记录更多的数据也可以轻易扩展。这是数据容器最基本的价值,它可以容纳多份数据,使我们的代码更优雅、高效。因此,学习数据容器的主要目的是为了实现批量存储和处理多份数据。这是数据容器为我们带来的最大价值。
习惯看视频的同学可以看这个免费教程:
https://www.bilibili.com/video/BV1ZK411Q7uX/?vd_source=704fe2a34559a0ef859c3225a1fb1b42&wxfid=o7omF0RELrnx5_fUSp6D59_9ms3Y
数据容器
Python中的数据容器
一种可以容纳多份数据的数据类型,容纳的每一份数据称之为1个元素每一个元素,可以是任意类型的数据,如字符串、数字、布尔等。
如上图,可以看到我们这边,就有了一个数据容器了 那在容器的内部就会有元素1,元素2,元素6,元素9,元素n等等一系列的元素在里面。
那么这个数量呢可以是非常非常多的。数据容器根据特点的不同,如:
-
是否支持重复元素
-
是否可以修改
-
是否有序,等
分为5类,分别是:
列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)我们将一一学习它们。
列表的定义
学习目标
-
掌握列表的定义格式
为什么需要列表
思考:有一个人的姓名(TOM)怎么在程序中存储?
答:字符串变量
思考:如果一个班级100位学生,每个人的姓名都要存储,应该如何书写程序?声明100个变量吗?
答:No,我们使用列表就可以了,列表一次可以存储多个数据
列表(list)类型,是数据容器的一类,我们来详细学习它。列表的定义基本语法:
# 字面量
[元素1,元素2,元素3,元素4,...]
# 定义变量
变量名称 = [元素1,元素2,元素3,元素4,...]
# 定义空列表
变量名称 = []
变量名称 = list()
列表内的每一个数据,称之为元素
-
以 [] 作为标识
-
列表内每一个元素之间用, 逗号隔开
列表的定义方式
现在让我们来简单的看一看它的案例演示吧,假设我们想要存储3个字符串的数据,然后通过print的语句将它的内容打印出来,又通过type语句查看了一下它的类型:
name_list = ['itheima','itcast','python']
print(name_list)
print(type(name_list))
输出结果为:
['itheima', 'itcast', 'python']
<class 'list'>
同时你看到他的类型叫做list,那这也是我们所说的列表。
我们在下面又定义了一个列表,那你会在列表中发现,3个元素好像类型都不一样
my_list = ['itheima',666,True]
print(my_list)
print(type(my_list))
那我们写完之后把他的内容打印出来,同时打印一下他的类型,也会发现可以正常的输出。
['itheima', 666, True]
<class 'list'>
证明了一件事情,就是我们的列表中,他存储的元素类型,可以是不同的数据类型。
那既然是这样的话我们来想一想,我们存储的元素类型他是不受限制的,那我在里面再存一个列表是否可以呢?肯定是可以的,那如果说在列表里面再存入列表。那这种行为我们把它叫做嵌套。
my_list = [[1,2,3],[4,5,6]]
print(my_list)
print(type(my_list))
我们会发现他里面有两个元素,第一个元素是个列表,第二个元素也是个列表。那所以当前我们写的这代码,就是写了一个列表,列表里面有两个元素,然后每一个元素又都是列表,那我们通过print语句以及type语句,打印出结果:
[[1, 2, 3], [4, 5, 6]]
<class 'list'>
同样也可以正常输出,且类型也是列表类型。
注意:列表可以一次存多个数据,且可以为不同的数据类型,支持嵌套。
列表的下标索引
学习目标
-
掌握使用列表的下标索引从列表中取出元素
如何从列表中取出特定位置的数据呢?我们可以使用:下标索引
如图,列表中的每一个元素,都有其位置下标索引,从前向后的方向,从0开始,依次递增我们只需要按照下标索引,即可取得对应位置的元素。
name_list =['Tom','Lily','Rose']
print(name_list[0]) # 结果:Tom
print(name_list[1]) # 结果:Lily
print(name_list[2]) # 结果:Rose
列表的下标(索引) - 反向
或者,可以反向索引,也就是从后向前:从-1开始,依次递减(-1、-2、-3......)
如图,从后向前,下标索引为:-1、-2、-3,依次递减。
name_list =['Tom','Lily','Rose']
print(name_list[-1]) # 结果:Rose
print(name_list[-2]) # 结果:Lily
print(name_list[-3]) # 结果:Tom
嵌套列表的下标(索引)
如果列表是嵌套的列表,同样支持下标索引其实我们就需要写两层下标索引就可以了
如图,下标就有2个层级了。
# 2层嵌套1ist
my_list=[[1,2,3],[4,5,6]]
# 获取内层第一个1ist
print(my_list[0]) #结果:[1,2,3]
# 获取内层第一个1ist的第一个元素
print(my_list[0][0]) #结果:1
列表的常用操作
学习目标
-
掌握列表的常用操作(方法)和特点
在我们前面学习了关于列表的定义以及使用下标索引去获取指定的元素值,那么除了这两种操作以外呢,我们的列表也提供了一系列的功能:比如插入元素,删除元素,清空列表,修改元素,统计元素个数等等功能,那么这些功能,我们都把它称之为叫做列表的方法。
那这里面我们有了一个新的名词,叫做方法,那方法又是什么呢?
我们来回忆一个内容,我们在前面学习过函数,那我们知道,函数是一个封装的代码单元,可以提供特定的功能。在Python中,如果我们将函数定义在class时,也又是类的成员之内的话,那么这个函数,他的名字就不会再叫函数了,而会称之为方法。
那可以看到,其实,函数和方法其实在功能上都是一样的,只不过他们写的地方是不同的。
# 函数
def add(x, y)
return x + y
# 方法
class Student:
def add(self,x , y):
return x + y
关于类和方法的定义,在面向对象章节我们学习,目前我们知道如何使用方法即可。
列表的查询功能(方法)
函数是一个封装的代码单元,可以提供特定功能。在Python中,如果将函数定义为class(类)的成员,那么函数会称之为:方法 方法和函数功能一样,有传入参数,有返回值,只是方法的使用格式不同:函数的使用:
num = add(1,2)
方法的使用:
student = Student()
num = student.add(1,2)
-
查找某元素的下标
功能:查找指定元素在列表的下标,如果找不到,报错ValueError
语法:列表.index(元素)
index就是列表对象(变量)内置的方法(函数)
my_list = ['itheima','itcast','python']
print(my_list.index('itcast')) # 结果1
列表的修改功能(方法)
-
修改特定位置(索引)的元素值:
-
语法:列表[下标] = 值
可以使用如上语法,直接对指定下标(正向、反向下标均可)的值进行:重新赋值(修改)
#正向下标
my_list = [1,2,3]
my_list[0] = 5
print(my_list) # 结果:[5,2,3]
#反向下标
my_list = [1,2,3]
my_list[-3] = 5
print(my_list) # 结果:[5,2,3]
-
插入元素:
语法:列表.insert(下标, 元素),在指定的下标位置,插入指定的元素
my_list = [1,2,3]
my_list.insert(1,"itheima")
print(my_list) # 结果 [1, 'itheima', 2, 3]
-
追加元素:
语法:列表.append(元素),将指定元素,追加到列表的尾部
my_list = [1,2,3]
my_list.append(4)
print(my_list) # 结果 [1, 2, 3, 4]
my_list = [1,2,3]
my_list.append([4,5,6])
print(my_list) #结果 [1, 2, 3, [4, 5, 6]]
-
追加元素方式2:
语法:列表.extend(其它数据容器),将其它数据容器的内容取出,依次追加到列表尾部
my_list = [1,2,3]
my_list.extend([4,5,6])
print(my_list) # 结果 [1, 2, 3, 4, 5, 6]
-
删除元素:
语法1:del 列表[下标]
语法2:列表.pop(下标)
my_list = [1,2,3]
#方式1
del my_list[0]
print(my_list) # 结果 [2, 3]
# 方式2
my_list.pop(0)
print(my_list) # 结果 [2, 3]
-
删除某元素在列表中的第一个匹配项
语法:列表.remove(元素)
my_list = [1,2,3,2,3]
my_list.remove(2)
print(my_list) # 结果:[1, 3, 2, 3]
-
清空列表内容
语法:列表.clear()
my_list = [1,2,3]
my_list.clear()
print(my_list) # 结果[]
-
统计某元素在列表内的数量
语法:列表.count(元素)
my_list = [1,1,1,2,3]
print(my_list.count(1)) # 结果:3
列表的查询功能(方法)
-
统计列表内,有多少元素语法:len(列表)
可以得到一个int数字,表示列表内的元素数量
my_list = [1,2,3,4,5]
print(len(my_list)) # 结果:5
列表的方法 - 总览
编号 |
使用方式 |
作用 |
---|---|---|
1 |
列表.append(元素) |
向列表中追加一个元素 |
2 |
列表.extend(容器) |
将数据容器的内容依次取出,追加到列表尾部 |
3 |
列表.insert(下标, 元素) |
在指定下标处,插入指定的元素 |
4 |
del 列表[下标] |
删除列表指定下标元素 |
5 |
列表.pop(下标) |
删除列表指定下标元素 |
6 |
列表.remove(元素) |
从前向后,删除此元素第一个匹配项 |
7 |
列表.clear() |
清空列表 |
8 |
列表.count(元素) |
统计此元素在列表中出现的次数 |
9 |
列表.index(元素) |
查找指定元素在列表的下标找不到报错ValueError |