三、Python 的数据结构
1、列表
列表的创建和删除
1、创建列表:
- 使用中括号 [] 将数据围起来
- 数据之间用逗号分隔
赋值运算符 = 将列表赋值给变量
示例:
2、列表中的数据称为元素,可以是多种数据类型。
3、创建空列表
示例:
4、在 Python 中,可以使用 list() 函数直接创建列表。
list() 的括号 () 中可以是字符串、range() 对象或其它可以迭代的数据。示例:
拓展:
range()函数:
基本语法格式:
range(start, stop, step)
数据范围:[start, stop)
5、可以用 del 语句,后面指定列表名称。
示例:
索引和切片
1、Python 中的索引从 0 开始记数递增。
索引有正负。(当索引为负数时,从右往左开始计数,也就是从列表的最后一个元素开始访问,对应的索引为 -1)。负数索引从 -1 开始。示例:
2、可以通过 len() 函数获取该列表的长度,即元素个数。
示例:
3、列表 1 包含列表 2 ,想要访问列表 2 中的元素,需要使用两次索引。
示例:
4、通过切片(slice) 也可以访问列表中的元素,而且更加灵活。
- 语法格式:
列表名[start : end : step]
- start:起始索引(包含该位置),默认值为 0 .
- end:结束索引(不包含该位置),默认值为列表的长度。
- step:步长,默认值为 1。步长为正数时,从左往右取值;步长为负数时,从右往左取值。(如果省略步长,最后一个冒号也可以省略。如果省略的是 start 和 end ,则需要保留冒号)
使用切片从列表中获取元素并不会改变原有列表中的元素。
示例:
注释:
- 与 range() 的区别:
- range() 间隔用 “,” ,不可省略;slice 间隔用 “:” ,视条件可省略。
- range() 为建立列表 list;slice 用于切片,从列表中切出元素。
添加列表元素
1、append() 方法
append() 方法用于在列表末尾添加新元素,而且每次只能添加一个元素。
示例:
- 注意:append() 方法只接受 1 个参数
2、extend() 方法
extend() 方法用于向列表末尾添加多个元素,且不限制数据类型。
添加数据时,需要在 () 中指定列表的形式。示例:
3、insert() 方法
insert() 方法可以在列表中的任意位置添加元素。
该方法有两个参数,第一个参数表示带添加元素的位置(索引),第二个参数表示待添加的元素。
insert() 方法一次只能添加一个元素。示例:
注释:
正索引为位置(本质上为相对距离),负索引为相对距离。
修改列表元素
可以通过索引修改列表元素
示例:
- 注意:一次只能修改一个元素。
删除列表元素
1、remove() 方法
remove() 方法只需要指定一个待删除的元素。如果指定的元素在列表中不存在,则会出现 ValueError 错误。
示例:
- 注意:前提是该元素必须存在于列表中。
2、pop() 方法
pop() 方法只许指定列表中的索引值并将其删除。
如果不指定索引,则默认删除最后一个元素。示例:
3、del 语句
示例:
- 注意:del 是 Python 中的一个语句,并不是列表中的方法。
2、元组
元组的创建和删除
1、列表中使用中括号 [] 进行定义,而元组使用小括号 () 进行定义。
元组中的元素可以是不同的数据类型,每一个元素使用 ==,(逗号)==进行分隔。
2、如果元组中只有一个元素,元素后面也需要加一个逗号,如果不加逗号,元素会还原其原本的类型,元组会定义为普通变量。
示例:
3、元组中的元素可以是字符串、数字等多种数据类型。
定义元组的小括号 () 也可以省略,直接使用逗号分隔元素即可。示例:
4、空元组可以用于为函数传递一个控制或返回空值。
示例:
5、使用 tuple() 函数和 range() 函数也可以创建一个数值型的元组。( list() 和 tuple() 中的数据只要是可迭代对象就可以,比如字符串、range() 对象等)
示例:
6、元组中的元素不可以被修改。
如果必须要删除元组,可以使用 del 语句将整个元组删除。示例:
- 在实际应用中,del 语句并不常用,因为 Python 会自动将其回收,不用手动删除。
访问元组元素
1、索引
示例:
2、切片
示例:
”修改“元组元素
1、虽然不能修改元组中的元素,但可以创建一个同名元组并对它重新赋值。
示例:
2、我们可以使用 + 的方式拼接元组和新元素,以达到修改元组元素的目的。
示例:
3、在进行元组连接时,连接的内容必须都是元组,不可以将元组与字符串或列表进行连接。
如果要连接的元组只包含一个元素,不要忘记在该元素后面加上逗号。
如果想修改元组中间的元素,可以通过切片实现。示例:
3、字典
字典的创建和删除
创建字典时,每个元素都必须包含键和值两个部分。
- 键和值使用 ==:(冒号)==分隔;
- 每个元素之间通过 ==,(逗号)==分隔;
- 字典中的所有元素都放在 {} 中;
- 如果是空字典,则直接使用 {} 表示。
定义格式:
字典名称 = {key1:value1, key2:value2, ..., keyn:valuen}
1、字典中允许存在不同的 key 对应相同的 value。
示例:
2、如果字典中的键出现了相同的情况,则后者的值将会覆盖前者的值。
示例:
3、空字典
示例:
4、通过 dict() 函数创建字典。(这里键和值之间使用的是
=
)
- 注意:键的位置不能加上表示字符串的引号,否则会出错。
示例:
5、我们还可以通过已创建的元组和列表分别作为字典的键和值。
- 注意:这里元组只能作为键,列表作为值,不能颠倒。因为元组不可变,符合键的条件,而列表可变,符合值的条件。
示例:
6、通过 dict() 和 zip() 函数创建字典可以将已定义好的元组和列表放入 zip() 函数中,作为它的两个参数,生成的字典 dict2 中,键和值是对应的。
示例:
- 这里的 zip() 函数可以将多个列表或元组对应的位置组合为元组,然后返回包含这些内容的 zip 对象,再通过 dict() 函数将其转化为字典。
7、与列表和元组一样,不需要的字典也可以使用 del 语句进行删除。
如果只是清空字典中的元素,可以使用 clear() 方法,原本的字典将会变成一个空字典。示例:
访问字典元素
1、通过键找到对应的值。
示例:
2、Python 中推荐使用 get() 函数来获取指定的键。
如果该方法指定的键不存在,则返回一个默认值(None)。示例:
3、可以为 get() 函数设置返回的默认值,即当指定的键不存在时,返回的就是设置的值。
示例:
添加字典元素
1、在向字典中添加新元素时,也需要以键值对的形式添加。
在添加的时候,需要指定新的键并为其赋值,可以是新值,也可以是重复的值。示例:
修改字典元素
示例:
删除字典元素
1、del 语句不仅可以删除整个字典,还可以删除字典中某个指定的元素。
使用这种方式删除元素,需要指定的键。示例:
2、使用 pop() 方法和 popitem() 方法删除字典中指定的元素。
- 在 pop() 方法中指定键,可以弹出对应的值并删除。
- popitem() 方法弹出的是字典中的最后一个元素,即最后一个键值对,并将其删除。
示例:
4、集合
在 Python 中,集合最大特点就是元素唯一性。
集合的创建和删除
1、方法:
- 直接使用 {} 创建集合
- 使用 set() 函数进行创建
示例:
如果集合中有重复的元素,Python 会自动只保留 1 个(自动去掉重复的部分)。
在创建集合时,会去掉重复的元素而生成无序且不重复的集合。
2、如果想创建一个空集合,必须使用 set() 函数。因为直接使用 {} 定义,表示创建一个空字典。
在 Python 中,set() 函数可以将可迭代对象转换为集合,比如列表、字符串等。示例:
3、定义混合类型的集合。
示例:
4、在 Python 中,使用 del 语句可以删除整个集合,使用 clear() 方法可清空集合中的元素。
示例:
访问集合
1、由于集合是一种无序的数据类型,无法通过索引访问对应的元素。则可以用 for 循环遍历集合,读取元素。
示例:
添加集合元素
1、在集合中,可以使用 add() 方法添加新元素。
添加的元素可以是字符串、数字、布尔类型(Ture 或者 False)、元组等不可变对象,不能是列表、字典等可变对象。
添加的元素必须是集合中不存在的。示例:
删除集合元素
1、使用 remove() 方法,在该方法中指定要删除的元素即可。
示例:
2、Python 提供了一个可以随机删除集合元素的方法 pop() 。
该方法不需要指定待删除的元素,直接使用集合调用即可。示例:
集合的交并差操作
- 交集:使用 & 符号,返回两个集合的共同元素。
- 并集:使用 | 符号,返回两个集合的所有元素(不重复)。
- 差集:使用 - 符号,比如 a-b 表示只属于 a,而不属于 b 的元素。
- 对称差集:使用 ^ 符号,返回两个集合的非共同元素。
示例:
5、字符串
字符串的拼接
1、如果需要将两个或多个字符串拼接起来,生成一个字符串,可以使用 + 运算符。
- 注意:字符串不允许直接与其他数据类型进行拼接,需要将其他数据类型转换成字符串类型才可以继续拼接。
在没有
=
的情况下,如果字符串之间相邻,则会自动合并为一个字符串。示例:
2、可以使用 * 来重复字符串,然后再拼接。
示例:
字符串切片
不同的字符占用的字节数不同,在 Python 中,数字、英文、小数点、下划线、空格占 1 个字节,一个汉字可能占用 2 ~ 4 个字节,这主要取决于使用的编码。
在 GBK、GB2312 编码中,汉字占两个字节;在 UTF-8 编码中,汉字(包含中文标点符号)占 3 个字节。
1、Python 提供了 len() 函数,来获取字符串的长度。(默认情况下,len() 函数不区分汉字或字母的长度,全部按照 1 个字节计算)。
如果要获取字符串实际占用的字节数时,可以使用 encode() 方法进行编码后获取字符串长度。示例:
- 注意:使用 encode() 方法不指定编码时,默认采用 UTF-8 编码。
2、索引
示例:
字符串的拆分和合并
字符串拆分时,会生成列表形式;字符串合并时,会将列表整合成一个字符串。
1、split() 方法
split() 方法可以拆分字符串并返回列表形式。
语法格式:
str.split(sep,maxsplit)
参数说明:
- str:表示字符串,可以是字符串赋值后的变量。
- sep:分隔符,可以包含多个字符,默认值为 None。
- maxsplit:分割次数,可选参数。如果不指定或指定该参数为 -1,则表示分割次数没有限制,否则返回列表的元素个数。
示例:
2、join() 方法
字符串在合并时会通过指定的分隔符连接在一起。
语法格式:
newstr = str.join(iterable)
参数说明:
- newstr:合并后生成的新字符串。
- str:字符串类型的分隔符。
- iterable:可迭代对象。
示例:
检索字符串
1、count() 方法
count() 方法用于检索指定字符串在另一个字符串中出现的次数。如果不存在,则返回 0,否则返回出现次数。
语法格式:
str.count(sub,start,end)
参数说明:
- str:原始字符串。
- sub:带检索的子字符串。
- start:可选参数,表示检索范围的起始索引。如果不指定,则从头开始检索。
- end:可选参数,表示检索范围的结束索引。如果不指定,则会一直检索到结尾。
示例:
2、find() 方法
如果检索的字符串不存在,则返回 -1,否则返回第 1 次出现该子字符串时的索引。
语法格式
str.find(sub,start,end)
参数说明:
- str:原始字符串。
- sub:带检索的子字符串。
- start:可选参数,表示检索范围的起始索引。如果不指定,则会从头开始索引。
- end:可选参数,表示检索范围的结束索引。如果不指定,则会一直检索到结尾。
示例:
3、index() 方法
index() 方法与 find() 方法类似,不同的是如果检索的子字符串不存在,会抛出异常。
语法格式:
str.index(sub.start.end)
示例:
4、startswith() 方法
startswith() 方法用于检索字符串是否以指定的子字符串(前缀)开头,如果是则返回 True,否则返回 False。
语法格式:
str.startswith(prefix,start,end)
参数说明:
- str:原始字符串。
- prefix:带检索的子字符串(前缀)。
- start:可选参数,表示检索范围的起始索引。如果不指定,则会从头开始索引。
- end:可选参数,表示检索范围的结束索引。如果不指定,则会一直检索到结尾。
示例:
5、endswith() 方法
endswith() 方法用于检索字符串是否以指定的子字符串(后缀)结尾,如果是则返回 True,否则返回 False。
语法格式:
str.endswith(suffix,start,end)
参数说明:
- str:原始字符串。
- suffix:带检索的子字符串(后缀)。
- start:可选参数,表示检索范围的起始索引。如果不指定,则会从头开始索引。
- end:可选参数,表示检索范围的结束索引。如果不指定,则会一直检索到结尾。
示例:
拓展:
1、lower() 方法
lower() 用于将字符串中的大写字母转换为小写字母。
如果没有需要转换的字母,则返回原始字符串,否则返回一个新的字符串。
- 注意:新字符串和原始字符串长度相同。
示例:
2、upper() 方法
upper() 用于将字符串中的小写字母转换为大写字母。
如果没有需要转换的字母,则返回原始字符串,否则返回一个新的字符串。
- 注意:新字符串和原始字符串长度相同。
示例:
3、replace() 方法
replace() 方法用于将字符串中的指定字符串(old)替换成新字符串(new),可以指定替换次数。
语法格式:
str.replace(old,new,max)
参数说明:
- old:原始字符串中将被替换的旧字符串。
- new:新字符串。
- max:可选参数,表示替换次数。
示例:
4、strip() 方法
strip() 方法用于去除字符串左右两侧的空格和特殊字符,可以在该方法中指定多个需要去除的字符。
如果不指定,则默认去除空格、制表符(\t)、回车符(\r)、换行符(\n)等。示例:
格式化字符串
1、format() 方法
使用该方法格式化字符串时,需要通过 {} 和 : 创建格式化模板。
当 {} 中为数字时,表示的是位置参数;当 {} 中表示的是其他参数是,表示的是关键字参数。示例:
- 注意:两种方式可以混用,但是位置参数必须在关键字参数之前,否则会出错。
当使用 :(冒号)时,: 表示格式化符号的开始。
示例:
2、% 操作符
常见的格式化符号:
格式化符号 说明 %c 单个字符 %s 字符串 %d 十进制整数 %f 浮点数 %o 无符号八进制整数 %x 无符号十六进制整数 %e 用科学计数法格式化浮点数 示例:
辅助符号:
辅助符号 说明 + 右对齐,正数前面加正号 - 左对齐,负数前面加负号 0 用于填充空白处 # 在八进制数前显示0o,十六进制数前显示0x或0X m.n m表示最小总宽度(包括小数点),n表示小数点后的位数 示例:
6、获取身份证号码中的出生日期
程序代码:
student1 = '你可以通过程序从身份证号码中只输出出生信息吗?' print('student1说:',student1) # 输出student1说的话 student2 = '那就拿你的身份证号码试试吧!' print('student2说:',student2) # 输出student2说的话 id_info = input('请输入18位身份证号码:') # 输入18位身份证号码 print('你的身份证号码是:',id_info) # 输入身份证号码 brith = id_info[6:10] + '年' + id_info[10:12] + '月' + id_info[12:14] + '日' print('student2说:你的出生信息是',brith) # 输出出生年月日 print('student2说:你的生日就是',brith[5:]) # 输出生日
运行结果: