4.Python容器类型-1
4. 容器类型 - 1
4.1 字符串介绍
定义
如下定义的变量a,存储的是数字类型的值
1 | a = 100 |
如下定义的变量b,存储的是字符串类型的值
1 | b = "www.dgut.edu.cn" |
小总结:
- 双引号或者单引号中的数据,就是字符串
下标
下标:就是标记空间的一个数字
有些文档叫法为“索引”,或是下标。
如果有字符串:name = 'abcdef',在内存中的实际存储如下:
下标为正数
| 第0个空间 | 第1个空间 | 第2个空间 | 第3个空间 | 第4个空间 | 第5个空间 |
|---|---|---|---|---|---|
| a | b | c | d | e | f |
下标为负数
| 第 -6 个空间 | 第 -5 个空间 | 第 -4 个空间 | 第 -3 个空间 | 第 -2 个空间 | 第 -1 个空间 |
|---|---|---|---|---|---|
| a | b | c | d | e | f |
特点:
- 每个字符单独存储,各占一个存储空间
- 为了方便标记处哪个空间存放的是哪个字符,Python使用了”下标”
- 如果从左侧开始编号,那么下标从
0开始 - 如果从右侧开始编号,那么下标从
-1开始 - 如果字符串只有3个字符例如”abc”,那么能用的下标为0、1、2不能使用超过2以上的,这种情况就是”越界”。很危险会导致程序崩溃
下标的使用
1 | name = 'abcdef' |
运行结果:
1 | a |
4.2 字符串切片
什么是切片
较为官方的说法:切片是指对操作的对象截取其中一部分的操作
通俗来说:一种能够从数据中取到一部分数据的方式
例如:
有一个字符串"abcdef",我们可以通过切片取到"cde"
切片不仅可以在字符串中应用,还可以对列表、元组等进行操作,简言之“切片”功能很重要。
本节课我们以字符串为例讲解“切片”
使用方式
语法
1 | [起始:结束:步长] |
注意:
- 选取的区间从”起始”位开始,到”结束”位的前一位结束(不包含结束位本身),步长表示选取间隔
- 默认“步长”为1,即取完一个下标的数据之后,第二个下标的是在刚刚下标基础上+1
- 步长为正数,表示从左向右取数据
- 步长为负数,表示从右向左取数据
示例代码
示例一:
1 | name = 'abcdef' |
运行结果:
1 | abc |
示例二:
1 | name = 'abcdef' |
运行结果:
1 | abc |
示例三:
1 | name = 'abcdef' |
运行结果:
1 | de |
示例四:
1 | name = 'abcdef' |
运行结果:
1 | cdef |
示例五:
1 | name = 'abcdef' |
运行结果:
1 | bcde |
示例六:
1 | name = 'abcdef' |
运行结果:
1 | bd |
示例七:
1 | name = 'abcdef' |
运行结果:
1 | fedc |
示例八:
1 | name = 'abcdef' |
运行结果:
1 | fd |
示例九:
1 | name = 'abcdef' |
运行结果:
1 | abcdef |
示例十:
1 | name = 'abcdef' |
运行结果:
1 | abcdef |
说明:
- 开始位置、结束位置都未指定,且步长也未指定那么步长用默认的1,则此时从最左取到最右
示例十一:
1 | name = 'abcdef' |
运行结果:
1 | fedcba |
说明:
- 开始位置、结束位置都未指定,步长为
-1,此时从最右取到最左
示例十二:
1 | name = 'abcdef' |
运行结果:
1 | fdb |
说明
- 开始、结束位置都未指定,且步长是
-2,那么就意味着从右侧往左取数据,且步长为2(即隔一个取一个)
练习
给定一个字符串变量s,请反转字符串:
1 | s = 'Hello World!' |
总结
切片使用规则中,要么一个冒号
[开始位置:结束位置],要么两个冒号[开始位置:结束位置:步长]不写步长时,默认为1
步长为正数,表示从左向右取数据
步长为负数,表示从右向左取数据
当开始位置、结束位置都没有设定时,要看步长,如果步长为正数此时开始位置理解为最左,结束位置为最右,如果步长为负数此时开始位置理解为最右,结束位置为最左
4.3 字符串常见操作
find 方法
检测str是否包含在 my_str中,如果是返回开始的索引值,否则返回-1
1 | my_str.find(str, start=0, end=len(my_str)) |
1 | In [2]: my_str = "welcome to www.dgut.edu.cn" |
说明:
- 上述运行中数值
8表示"to"这个字符串在原字符串的开始下标值是8
count 方法
返回 str在start和end之间在 my_str里面出现的次数
1 | my_str.count(str, start=0, end=len(my_str)) |
1 | In [2]: my_str = "welcome to www.dgut.edu.cn" |
replace 方法
把 my_str 中的 str1 替换成 str2,如果 count 指定,则替换不超过 count 次
1 | my_str.replace(str1, str2, count) |
1 | In [2]: my_str = "welcome to www.dgut.edu.cn" |
split 方法
以 str 为分隔符切片 my_str,如果 maxsplit有指定值,则仅分隔 maxsplit 个子字符串
1 | my_str.split(str=" ", maxsplit) |
1 | In [1]: my_str = "welcome to www.dgut.edu.cn" |
lower 方法
转换 my_str 中所有大写字符为小写
1 | my_str.lower() |
1 | In [8]: my_str = "WELCOME to www.dgut.edu.cn" |
upper 方法
转换 my_str 中所有小写字母为大写
1 | my_str.upper() |
1 | In [10]: my_str = "welcome to www.dgut.edu.cn" |
strip 方法
删除字符串两端的空白字符
1 | In [12]: my_str = " welcome to www.dgut.edu.cn " |
splitlines 方法
按照行分隔,返回一个包含各行作为元素的列表
1 | my_str.splitlines() |
1 | In [16]: my_str = """welcome to www.dgut.edu.cn |
format 方法
返回字符串str的一种排版格式
- format()方法的基本使用
- 字符串format()方法的基本使用格式如下:str.format(逗号分隔的参数)
1 | print("{}:计算机{}的CPU占用率为{}%。".format("2024-11-12","PYTHON", 10)) |
输出为
1 | 2021-04-22:计算机PYTHON的CPU占用率为10%。 |
- 样式如下:{<参数序号>:<格式控制标记>}
- <填充>:用于填充的单个字符
- <对齐>:<左对齐;>右对齐;^居中对齐
- <宽度>:槽的设定输出宽度
- < ,>:数字的千位分隔符
- <精度>:浮点数小数部分的精度或字符串的最大输出长度
- <类型>:整数类型b, c, d, o, x, X;浮点数类型e, E, f, %
1 | PI = 3.14159 |
输出为
1 | 当圆半径为 2时,圆周长为12.57 |
- 最新的 f 表达式写法
1 | PI = 3.14159 |
说明
关于字符串的常见操作上面只列举了一些,其实还有很多,但各位同学们要注意
- 不要背,理解即可
- 忘记没关系,可以查阅资料
- 学会怎么用,什么时候用什么这是关键点
4.4 列表
引入
通过前面学习的字符串我们可以实现用它存储一串信息,例如一个人的名字 "小明",那么如何存储咱们班所有同学的名字呢?
定义100个变量,每个变量存放一个学生的姓名可行吗?有更好的办法吗?
答:列表
定义
定义列表的方式是[]
如下:用列表存储了3个学生的姓名
1 | stu_names = ['张三', '李四', '王五'] |
如下:用列表存储了5个分数
1 | scores = [100, 99, 100, 95, 90] |
基本使用
下标
列表中存储的多个数据,我们可以对这些数据任意的使用
方式是:通过下标可以实现定位,然后就可以用这个数据
例如:
1 | stu_names = ['张三', '李四', '王五'] |
注意:下标依然是从0开始使用
切片
切片具体的知识我们已经学习过了,在列表也是支持切片操作的
1 | stu_names = ['张三', '李四', '王五'] |
列表逆序:
1 | stu_names = ['张三', '李四', '王五'] |
遍历
所谓列表遍历,就是指将列表中的所有的数据依次获取打印
方式一:使用for循环 (首选)
1 | stu_names = ['张三', '李四', '王五'] |
运行结果:
1 | 张三 |
方式二:使用while循环
1 | stu_names = ['张三', '李四', '王五'] |
运行结果:
1 | 张三 |
注意点
学习其他编程语言的同学,此时能够看到Python中的列表与C语言、C++语言、Java中的数组很类似
相同点:列表和数组都能实现多个数据的存储
不同点:列表可以存储不同类型的数据,而数组只能存储相同数据类型。
如下代码,完成了一个列表存储了多个信息
1 | student = ["小明", "广东省东莞市", 18, 176.5] # 18为年龄,176.5为身高 |
技巧:虽然Python中的列表可以存储多个不同的数据类型,但一般情况下我们很少这么做,而是把数据类型相同的数据放到一个列表,这样操作时会更加方便,否则就会出现一会整数,一会字符串很容易出错
如果真的需要存储多个数据,例如一个人的信息由多个组成,此时一般用Python中的字典来进行存储
4.5 列表的相关操作
列表,最大的特点能够存储多个数据,一般情况下我们需要对这个列表进行数据的增删改查,详细功能如下
数据增加(append、extend、insert)
append 方法
通过append可以向列表添加元素
格式:
1 | 列表.append(新元素数据) |
示例:
1 | # 定义列个表存储3个学生的姓名 |
extend 方法
通过extend可以将另一个列表中的元素逐一添加到列表中
格式:
1 | 列表.extend(另外一个列表) |
示例:
1 | a = [1, 2] |
insert 方法
insert(index, object)在指定位置index(索引,理解为下标即可)前插入元素object
1 | a = [0, 1, 2] |
数据修改
修改元素的时候,要通过下标来确定要修改的是哪个元素,然后才能进行修改
格式:
1 | 列表[下标] = 新数据 |
示例:
1 | # 定义列个表存储3个学生的姓名 |
数据查询(in、not in、count)
所谓的查找,就是看看指定的元素是否存在
in、not in 查询列表中的元素是否存在
查找的常用方法为:
- in(存在),如果存在那么结果为
true,否则为false - not in(不存在),如果不存在那么结果为
true,否则false
in格式:
1 | 数据 in 列表 |
not in 格式:
1 | 数据 not in 列表 |
示例:
1 | # 待查找的列表 |
count 查询元素个数
格式:
1 | 列表.count("要查询的数据") # 结果就是找到的数据的个数 |
1 | In [5]: nums = [1, 2, 3, 4, 5, 1, 2, 3] |
数据删除(del、pop、remove)
列表元素的常用删除方法有:
del:根据下标进行删除pop:删除最后一个元素,也可以在pop后接下标进行删除remove:根据元素的值进行删除
del
1 | movie_names = ['加勒比海盗', '骇客帝国', '第一滴血', '指环王', '霍比特人', '速度与激情'] |
pop
1 | movie_names = ['加勒比海盗', '骇客帝国', '第一滴血', '指环王', '霍比特人', '速度与激情'] |
remove
1 | movie_names = ['加勒比海盗', '骇客帝国', '第一滴血', '指环王', '霍比特人', '速度与激情'] |
数据排序(sort、reverse)
sort
sort方法是将列表按特定顺序重新排列,默认为由小到大,参数reverse=True可改为倒序,由大到小。
1 | a = [1, 4, 2, 3] |
reverse
reverse方法是将列表倒叙
1 | a = [1, 4, 2, 3] |
4.6 列表嵌套
什么是列表嵌套
类似while循环的嵌套,列表也是支持嵌套的
一个列表中的元素又是一个列表,那么这就是列表的嵌套
1 | school_names = [ |
应用
一个学校,有3个办公室,现在有8位老师等待工位的分配,请编写程序,完成随机的分配
1 | import random |
运行结果如下: (因为是随机 所以每次运行结果都可以不同)
1 | 办公室1的人数为:1 |
- 标题: 4.Python容器类型-1
- 作者: Jinshuo Jiang
- 创建于 : 2025-09-30 21:36:03
- 更新于 : 2025-09-30 21:37:36
- 链接: https://redefine.ohevan.com/2025/09/30/Python container types-1/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。