六、数据容器
00.注意
- 列表中的元素可以是 不同的数据类型 ,而数组中的元素是 同一数据类型 。
- 列表支持 反向索引 ,即( …, -3, -2, -1)。
- 元组若只有一个数据,则这个数据后面要添加逗号( , ),否则不是元组类型。
- 元组不支持修改,但元组内部list的内部元素可以修改。
- 字符串的strip方法去除字符串首尾指定字符串时,是按 字符 去除的,尽管传入参数是字符串。
- 数据容器的切片注意步长为负数时,表示反向取,起始下标和结束下标也要反向变化。
01.数据容器入门
数据容器: 一种可以存储多份数据的数据类型,数据容器中的每一个数据元素 可以是任意类型 的数据。
作用: 批量存储数据。
常见数据容器: 列表( list )、元组( tuple )、字符串( str )、集合( set )、字典( dict )。
02.列表
2.1 列表的定义
格式:
# 定义字面量
[元素1, 元素2, 元素3, 元素4, ...]
# 定义变量
变量名 = [元素1, 元素2, 元素3, 元素4, ...]
# 定义空列表 方式一
变量名 = []
# 定义空列表 方式二
变量名 = list()
注意:
- 列表以[ ]作为标识。
- 列表内元素之间用逗号( , )隔开。
- 列表中的数据可以为不同的数据类型。注意和其它语言中数组的区别。
- 支持嵌套。
演示:
# 1.列表中元素为同一类型
my_list = ["python", "java", "c++"]
print(my_list) # ['python', 'java', 'c++']
print(type(my_list)) # <class 'list'>
# 2.列表中元素为不同类型
my_list = ["python", True, 678]
print(my_list) # ['python', True, 678]
print(type(my_list)) # <class 'list'>
# 3.定义嵌套列表
my_list = [[1, 2, 3], ["python", "java", "c++"]]
print(my_list) # [[1, 2, 3], ['python', 'java', 'c++']]
print(type(my_list)) # <class 'list'>
2.2 列表的下标索引
格式:
列表名称[下标索引]
注意:
- 从前向后,下标索引从0开始,依次递增(0, 1, 2, …)。
- 从后向前,反向索引,下标索引从-1开始,依次递减(…,-3,-2,-1)
- 获取超出下标索引范围的数据会报错。
演示:
# 1.正向下标索引(0, 1, 2, ...)
name_list = ["Tom", "Lily", "Rose"]
print(name_list[0]) # Tom
print(name_list[1]) # Lily
print(name_list[2]) # Rose
# 2.反向下标索引(..., -3, -2, -1)
name_list = ["Tom", "Lily", "Rose"]
print(name_list[-1]) # Rose
print(name_list[-2]) # Lily
print(name_list[-3]) # Tom
# 3.嵌套列表索引
my_list = [[1, 2, 3], ["python", "java", "c++"]]
print(my_list[0][1]) # 2
print(my_list[1][2]) # c++
2.3 列表的常用操作
格式:
1.查找某元素的下标。 列表名.index(元素)
2.修改特定位置的元素值。 列表名[下标] = 值
3.在特定位置插入元素。 列表名.insert(下标, 元素)
4.在列表尾部追加单个元素。 列表名.append(元素)
5.在列表尾部追加一批元素。 列表名.extend(其他数据容器)
6.删除特定位置元素。 del 列表名[下标] 或 列表名.pop(下标)
7.根据指定内容删除遇到的第一个匹配项。 列表名.remove(元素)
8.清空列表。 列表名.clear()
9.统计某元素的数量。 列表名.count(元素)
10.列表长度。 len(列表名)
演示:
mylist = ["python", "java", "c++"]
# 1.查找某元素的下标,若找不到,报错ValueError
index = mylist.index("java")
print(index) # 1
# index = mylist.index("hello")
# print(index) # ValueError: 'hello' is not in list
# 2.修改特定位置元素值
mylist[0] = "php"
print(mylist) # ['php', 'java', 'c++']
# 3.在特定位置插入元素
mylist.insert(1, "python")
print(mylist) # ['php', 'python', 'java', 'c++']
# 4.在列表尾部追加单个元素
mylist.append("c#")
print(mylist) # ['php', 'python', 'java', 'c++', 'c#']
# 5.在列表尾部追加一批元素
mylist2 = ["html", "css", "js"]
mylist.extend(mylist2)
print(mylist) # ['php', 'python', 'java', 'c++', 'c#', 'html', 'css', 'js']
# 6.删除特定位置元素 两种方式
# 方式一
del mylist[2]
print(mylist) # ['php', 'python', 'c++', 'c#', 'html', 'css', 'js']
# 方式二
element = mylist.pop(4)
print(mylist) # ['php', 'python', 'c++', 'c#', 'css', 'js']
print(element) # html
# 7.根据指定内容删除遇到的第一个匹配项
mylist = [2, 4, 6, 1, 4, 5]
mylist.remove(4)
print(mylist) # [2, 6, 1, 4, 5]
# 8.清空列表
mylist.clear()
print(mylist) # []
# 9.统计某元素的数量
mylist = [2, 4, 6, 1, 4, 5, 4]
num = mylist.count(4)
print(num) # 3
# 10.列表长度
mylist = [2, 4, 6, 1, 3]
num = len(mylist)
print(num) # 5
2.4 列表的遍历
遍历: 将容器内的元素依次取出,进行处理。也称 迭代 。
while循环遍历:
mylist = ["python", "java", "c++"]
# while遍历
index = 0
while index < len(mylist):
element = mylist[index]
print(f"下标{index}对应的元素是:{element}")
index += 1
for循环遍历:
mylist = ["python", "java", "c++"]
# for遍历
for element in mylist:
print(f"元素是:{element}")
2.5 列表特点总结
- 可以容纳多个元素( 2**63 - 1)。
- 可以容纳不同类型的元素(混装)。
- 数据有序存储(有下标索引)。
- 允许数据重复。
- 可以修改。
03.元组
3.1 元组的定义
引言: 列表存储的数据可以修改,如果想要传递的信息不被修改,列表就不合适了,那怎么办?
解决: 元组和列表的最大不同点在于元组一旦定义完成,就不可修改。
格式:
# 定义字面量
(元素1, 元素2, 元素3, 元素4, ...)
# 定义变量
变量名 = (元素1, 元素2, 元素3, 元素4, ...)
# 定义空元组 方式一
变量名 = ()
# 定义空元组 方式二
变量名 = tuple()
注意:
- 元组以( )作为标识。
- 元组内元素之间用逗号( , )隔开。
- 元组中的数据可以为不同的数据类型。
- 元组若只有一个数据,则这个数据后面要添加逗号。否则不是元组类型。
- 支持嵌套。
演示:
mytuple = ("python", True, 678)
print(mytuple) # ('python', True, 678)
print(type(mytuple)) # <class 'tuple'>
# 元组若只有一个数据,则这个数据后面要添加逗号
mytuple2 = ("python",)
# 嵌套
mytuple3 = ((1, 2, 3), (4, 5))
print(mytuple3) # ((1, 2, 3), (4, 5))
print(type(mytuple3)) # <class 'tuple'>
3.2 元组的下标索引
和列表list一模一样。有了前面的基础,这里直接上案例。
演示:
mytuple = (2, 4, 6, 1, 3)
num = mytuple[3]
print(num) # 1
mytuple = ((1, 2, 3), (4, 5))
num = mytuple[1][1]
print(num) # 5
num = mytuple[0][2]
print(num) # 3
3.3 元组的常用操作
元组不可修改,故常用操作比较少。
格式:
1.查找某元素的下标。 元组名.index(元素)
2.统计某元素的数量。 元组名.count(元素)
3.元组长度。 len(元组名)
演示:
# 1.查找某元素的下标
mytuple = ("python", "java", "c++")
index = mytuple.index("java")
print(index) # 1
# 2.统计某元素的数量
mytuple = ("python", "java", "c++", "java", "c++", "java")
num = mytuple.count("java")
print(num) # 3
# 3.元组长度
mytuple = ("python", "java", "c++", "java", "c++", "java")
num = len(mytuple)
print(num) # 6
3.4 元组的遍历
元组有下标索引,因此和列表的遍历一样。
while循环遍历:
mytuple = ("python", "java", "c++")
# while遍历
index = 0
while index < len(mytuple):
element = mytuple[index]
print(f"下标{index}对应的元素是:{element}")
index += 1
for循环遍历:
mytuple = ("python", "java", "c++")
# for遍历
for element in mytuple:
print(f"元素是:{element}")
3.5 元组数据的修改
普通的元组: 元组中元素不支持修改,否则报错。
t1 = (1, 2, 3)
t1[0] = 5 # 报错TypeError: 'tuple' object does not support item assignment
嵌套了列表的元组: 可以修改元组内list的内容。
t2 = (1, 2, True, ["python", "java", "c++"])
t2[3][0] = "php"
print(t2) # (1, 2, True, ['php', 'java', 'c++'])
3.6 元组特点总结
- 可以容纳多个元素( 2**63 - 1)。
- 可以容纳不同类型的元素(混装)。
- 数据有序存储(有下标索引)。
- 允许数据重复。
- 不可以修改。注意内部list。
04.字符串
解释: 字符串是 字符 的容器,一个字符串可以存放任意数量的字符。
4.1 字符串的下标索引
索引:
- 从前向后,下标从0开始。
- 从后向前,下标从-1开始。
演示:
my_str = "itheima and itcast"
# 从前向后,下标从0开始
value = my_str[2]
print(value) # h
# 从后向前,下标从-1开始
value = my_str[-2]
print(value) # s
4.2 字符串数据的修改
注意:
- 同元组一样,字符串是一个无法修改的数据容器。
- 所以修改特定位置字符、移除特定位置字符、追加字符等均无法完成。
- 如果必须要做修改,只能得到一个新的字符串,老字符串无法修改。
演示:
my_str = "itheima and itcast"
my_str[2] = "a" # 报错TypeError: 'str' object does not support item assignment
4.3 字符串的常用操作
格式:
1.查找某字符串的下标。 字符串名.index(字符串)
2.字符串的替换。 字符串名.replace(字符串1, 字符串2)
3.字符串的分割。 字符串名.split(分隔符字符串)
4.字符串的规整操作。 字符串名.strip() 或 字符串名.strip(字符串)
5.统计某字符串的出现次数。 字符串名.count(字符串)
6.字符串长度。 len(字符串名)
演示:
my_str = "itheima and itcast"
# 1.查找某字符串的下标 注意是该字符串中第一个字符的下标
index = my_str.index("and")
print(index) # 8
# 2.字符串的替换 注意是将全部的字符串1替换为字符串2,得到的是一个新字符串
my_new_str = my_str.replace("it", "程序")
print(my_str) # itheima and itcast
print(my_new_str) # 程序heima and 程序cast
# 3.字符串的分割 注意是按指定分隔符字符串,将字符串分割成多个字符串,得到的是一个列表
my_str = "hello python itheima itcast"
my_list_str = my_str.split(" ")
print(my_str) # hello python itheima itcast
print(my_list_str) # ['hello', 'python', 'itheima', 'itcast']
# 4.字符串的规整操作 去除字符串前后空格 注意中间空格去不了
my_str1 = " itheima and itcast "
new_my_str1 = my_str1.strip()
print(my_str1) # itheima and itcast
print(new_my_str1) # itheima and itcast
# 4.字符串的规整操作 去除字符串前后指定字符串,注意虽然传入的是字符串,但实际按字符去除
# 该例子虽然传入"12",但实际是只要满足"1"或"2"中的一个都会被去除
my_str2 = "12itheima and itcast21"
new_my_str2 = my_str2.strip("12")
print(my_str2) # 12itheima and itcast21
print(new_my_str2) # itheima and itcast
# 5.统计某字符串的出现次数
my_str = "itheima itcast itjmu"
num = my_str.count("it")
print(num) # 3
# 6.字符串长度
my_str = "itheima itcast itjmu"
num = len(my_str)
print(num) # 20
4.4 字符串的遍历
同列表、元组一样。
while循环遍历:
my_str = "黑马程序员"
# while遍历
index = 0
while index < len(my_str):
element = my_str[index]
print(f"下标{index}对应的元素是:{element}")
index += 1
for循环遍历:
my_str = "黑马程序员"
# for遍历
for element in my_str:
print(f"元素是:{element}")
4.5 字符串特点总结
- 长度任意(取决于内存大小)。
- 不可以容纳不同类型的元素(不能混装),只能存字符串。
- 数据有序存储(有下标索引)。
- 允许字符串重复。
- 不可以修改。
4.6 字符串大小比较
比较原理: 比较ASCII码表值。
解释: 程序中每一个字符都会对应一个数字的码值,字符串大小比较就是逐位比较字符数字码值的大小。
字符串大小比较流程: 从左向右,一位一位进行比较,只要有一位大,那么该字符串整体就大。
演示:
print(f'"abd" > "abc"的结果是:{"abd" > "abc"}') # "abd" > "abc"的结果是:True
print(f'"ab" > "a"的结果是:{"ab" > "a"}') # "ab" > "a"的结果是:True
05.数据容器的切片
序列: 内容连续、有序、可使用下标索引的数据容器。比如列表、元组、字符串。
切片: 从一个序列中,取出一个子序列。
格式:
表示从序列中,从指定位置开始,依次取出元素,到指定位置结束,得到一个新序列。
序列[起始下标:结束下标:步长]
注意:
- 起始下标表示从何处开始,可以不写,不写视作从头开始。
- 结束下标表示到何处结束,但不含结束下标本身,可以不写,不写视作截取到结尾。
- 步长表示依次取元素的间隔,默认为1,为1时可省略。步长1表示,一个个取元素,步长2表示,每次隔1个元素取。
- 步长也可以为负数,表示反向取(注意,起始下标和结束下标也要反向标记)。
演示:
# 1.对list进行切片,从1开始,4结束,步长1
my_list = [0, 1, 2, 3, 4, 5, 6]
new_my_list = my_list[1:4] # 步长1,可省略
print(new_my_list) # [1, 2, 3]
# 2.对tuple进行切片,从头开始,到最后结束,步长1
my_tuple = (0, 1, 2, 3, 4, 5, 6)
new_my_tuple = my_tuple[:] # 起始结束均可省略,但冒号保留,步长1,也可省略
print(new_my_tuple) # (0, 1, 2, 3, 4, 5, 6)
# 3.对str进行切片,从头开始,到最后结束,步长2
my_str = "01234567"
new_my_str = my_str[::2] # 起始结束均可省略,但冒号保留
print(new_my_str) # 0246
# 4.对str进行切片,从头开始,到最后结束,步长-1
my_str = "01234567"
new_my_str = my_str[::-1] # 等同于序列反转
print(new_my_str) # 76543210
# 5.对列表进行切片,从3开始,到1结束,步长-1
my_list = [0, 1, 2, 3, 4, 5, 6]
new_my_list = my_list[3:1:-1] # 注意步长为负数,表示反向取,故起始结束下标也要反着来
print(new_my_list) # [3, 2]
# 6.对元组进行切片,从头开始,到尾结束,步长-2
my_tuple = (0, 1, 2, 3, 4, 5, 6)
new_my_tuple = my_tuple[::-2]
print(new_my_tuple) # (6, 4, 2, 0)
06.集合
6.1 集合的定义
引言: 列表、元组、字符串都支持重复元素且内容有序,那么有没有不支持重复元素的数据容器呢?
解决: 有的兄弟,有的,它就是集合,不支持重复元素且内容无序。
格式:
# 定义字面量
{元素1, 元素2, 元素3, 元素4, ...}
# 定义变量
变量名 = {元素1, 元素2, 元素3, 元素4, ...}
# 定义空集合
变量名 = set()
注意:
- 集合中的元素不重复,不是说不允许向集合中添加已有元素,而是所有相同数据集合只保留一份。
- 定义空集合不能用{ },因为{ }被字典占用了。
演示:
# 定义集合 元素不重复且无序
my_set = {"传智教育", "黑马程序员", "Python", "传智教育", "黑马程序员", "Python", "传智教育", "黑马程序员"}
print(my_set) # {'Python', '黑马程序员', '传智教育'}
print(type(my_set)) # <class 'set'>
# 定义空集合
empty_my_set = set()
print(empty_my_set) # set()
print(type(empty_my_set)) # <class 'set'>
6.2 集合的常用操作
注意: 集合是无序的,故集合不支持下标索引,也不是序列,但集合允许修改。
格式:
1.添加新元素。 集合名.add(元素)
2.移除元素。 集合名.remove(元素)
3.随机取出一个元素。 集合名.pop()
4.清空集合。 集合名.clear()
5.取出2个集合的差集。 集合1.difference(集合2)
6.消除2个集合的差集。 集合1.difference_update(集合2)
7.2个集合合并为1个集合。 集合1.union(集合2)
8.统计集合元素数量。 len(集合名)
演示:
# 1.添加新元素
my_set = {'Python', '黑马程序员', '传智教育'}
my_set.add("itheima")
print(my_set) # {'传智教育', 'itheima', 'Python', '黑马程序员'}
# 2.移除元素
my_set = {'Python', '黑马程序员', '传智教育'}
my_set.remove("黑马程序员")
print(my_set) # {'传智教育', 'Python'}
# 3.随机取出一个元素 同时集合会移除该元素
my_set = {'Python', '黑马程序员', '传智教育'}
element = my_set.pop()
print(element) # 传智教育
print(my_set) # {'黑马程序员', 'Python'}
# 4.清空集合
my_set = {'Python', '黑马程序员', '传智教育'}
my_set.clear()
print(my_set) # set()
# 5.取出2个集合的差集 集合1.difference(集合2) 即集合1独有的,返回一个新集合,集合1、2不变
set1 = {1, 2, 3}
set2 = {1, 5, 6}
my_set = set1.difference(set2)
print(my_set) # {2, 3}
print(set1) # {1, 2, 3}
print(set2) # {1, 5, 6}
# 6.消除2个集合的差集。集合1.difference_update(集合2) 在集合1中,删除集合1、2共有的元素,集合1改变,2不变
set1 = {1, 2, 3}
set2 = {1, 5, 6}
set1.difference_update(set2)
print(set1) # {2, 3}
print(set2) # {1, 5, 6}
# 7.2个集合合并为1个集合 集合1.union(集合2) 得到新集合,集合1、2不变
set1 = {1, 2, 3}
set2 = {1, 5, 6}
my_set = set1.union(set2)
print(my_set) # {1, 2, 3, 5, 6}
print(set1) # {1, 2, 3}
print(set2) # {1, 5, 6}
# 8.统计集合元素数量
my_set = {1, 3, 5, 7, 1, 3, 5, 7}
num = len(my_set)
print(num) # 4
6.3 集合的遍历
集合没有下标索引,故不支持while循环遍历,仅支持for循环遍历。
for循环遍历:
# for遍历
my_set = {1, 3, 5, 7}
for element in my_set:
print(f"元素是:{element}")
6.4 集合特点总结
- 可以容纳多个元素。
- 可以容纳不同类型的元素(混装)。
- 数据无序存储(没有下标索引)。
- 不允许数据重复。
- 可以修改。
- 不支持while循环遍历。
07.字典
7.1 字典的定义
引言: 列表、元组、字符串的下标索引都是 整数 ,能不能自定义下标索引的数据类型?
解决: 字典中的元素是key : value键值对,通过key来获取value,因此key的作用就相当于下标索引。其中key、value可以是任意数据类型(key不可以为字典)。
格式:
# 定义字面量
{key: value, key: value, key: value, ...}
# 定义变量
变量名 = {key: value, key: value, key: value, ...}
# 定义空字典 方式一
变量名 = {}
# 定义空字典 方式二
变量名 = dict()
注意:
- key不可以重复。若定义重复key,虽然程序不会报错,但后面的数据会覆盖前面的数据。
演示:
# 定义字典
my_dict = {"薛之谦": 99, "林俊杰": 88, "周杰伦": 77}
print(my_dict) # {'薛之谦': 99, '林俊杰': 88, '周杰伦': 77}
print(type(my_dict)) # <class 'dict'>
# 定义空字典
my_dict2 = {}
my_dict3 = dict()
print(my_dict2) # {}
print(my_dict3) # {}
print(type(my_dict2)) # <class 'dict'>
print(type(my_dict3)) # <class 'dict'>
# 重复key 覆盖
my_dict = {"薛之谦": 99, "林俊杰": 88, "薛之谦": 77}
print(my_dict) # {'薛之谦': 77, '林俊杰': 88}
7.2 字典的索引
字典和集合一样,不可以使用下标索引。字典能使用的索引是key。
格式:
value = 字典名[key]
演示:
my_dict = {"薛之谦": 99, "林俊杰": 88, "周杰伦": 77}
score = my_dict["薛之谦"]
print(score) # 99
7.3 字典的嵌套
key、value可以是任意数据类型(key不可以为字典),故value可以为字典。
# 定义嵌套字典 注意数据容器中回车换行没影响,元素的分隔取决于逗号
stu_score_dict = {
"薛之谦": {
"语文": 77, "数学": 66, "英语": 33
},
"周杰伦": {
"语文": 88, "数学": 86, "英语": 55
},
"林俊杰": {
"语文": 99, "数学": 96, "英语": 66
}
}
print(stu_score_dict)
# 从嵌套字典中获取信息
score = stu_score_dict["周杰伦"]["语文"]
print(score) # 88
7.4 字典的常用操作
格式:
1.新增元素。 字典名[key] = value
2.更新元素。 字典名[key] = value
3.删除元素。 字典名.pop(key)
4.清空字典。 字典名.clear()
5.获取全部key。 字典名.keys()
6.统计字典内键值对数量。 len(字典名)
演示:
# 1.新增元素 注意key不存在 就是新增
my_dict = {"薛之谦": 99, "林俊杰": 88, "周杰伦": 77}
my_dict["张学友"] = 98
print(my_dict) # {'薛之谦': 99, '林俊杰': 88, '周杰伦': 77, '张学友': 98}
# 2.更新元素 注意key存在 就是更新
my_dict = {"薛之谦": 99, "林俊杰": 88, "周杰伦": 77}
my_dict["周杰伦"] = 89
print(my_dict) # {'薛之谦': 99, '林俊杰': 88, '周杰伦': 89}
# 3.删除元素 注意会获得value,同时字典中该键值对被删除
my_dict = {"薛之谦": 99, "林俊杰": 88, "周杰伦": 77}
score = my_dict.pop("林俊杰")
print(score) # 88
print(my_dict) # {'薛之谦': 99, '周杰伦': 77}
# 4.清空字典
my_dict = {"薛之谦": 99, "林俊杰": 88, "周杰伦": 77}
my_dict.clear()
print(my_dict) # {}
# 5.获取全部key
my_dict = {"薛之谦": 99, "林俊杰": 88, "周杰伦": 77}
all_key = my_dict.keys()
print(all_key) # dict_keys(['薛之谦', '林俊杰', '周杰伦'])
# 6.统计字典内键值对数量
my_dict = {"薛之谦": 99, "林俊杰": 88, "周杰伦": 77}
num = len(my_dict)
print(num) # 3
7.5 字典的遍历
字典不支持下标索引,故不支持while循环遍历。话不多说,上案例。
演示:
# 字典的遍历
my_dict = {"薛之谦": 99, "林俊杰": 88, "周杰伦": 77}
# 方式一 直接遍历字典,每一次取出的就是key
for element in my_dict:
print(f"element是:{element},对应value是:{my_dict[element]}")
# 方式二 遍历keys()
all_key = my_dict.keys()
for key in all_key:
print(f"字典的key是:{key},value是:{my_dict[key]}")
7.6 字典特点总结
- 可以容纳多个元素 (键值对)。
- 可以容纳不同类型的元素(混装)。
- 不支持下标索引。
- key不可以重复 (重复会覆盖)。
- 可以修改。
- 不支持while循环遍历。
08.五类数据容器对比总结
列表 | 元组 | 字符串 | 集合 | 字典 | |
---|---|---|---|---|---|
是否支持下标索引 | 是 | 是 | 是 | / | / |
是否支持重复元素 | 是 | 是 | 是 | / | / |
是否可以修改 | 是 | / | / | 是 | 是 |
是否序列 | 是 | 是 | 是 | / | / |
是否有序 | 是 | 是 | 是 | / | / |
09.数据容器的通用操作
遍历、len(容器),这些前面演示过了,这里不再赘述。
9.1 max(容器)
my_list = [1, 2, 3, 4, 5]
my_tuple = (6, 7, 8, 9, 10)
my_str = "abcdefg"
my_set = {11, 12, 13, 14, 15}
my_dict = {"key1": 1, "key2": 2, "key3": 3, "key4": 4, "key5": 5}
# 最大元素
print(max(my_list)) # 5
print(max(my_tuple)) # 10
print(max(my_str)) # g
print(max(my_set)) # 15
print(max(my_dict)) # key5
9.2 min(容器)
my_list = [1, 2, 3, 4, 5]
my_tuple = (6, 7, 8, 9, 10)
my_str = "abcdefg"
my_set = {11, 12, 13, 14, 15}
my_dict = {"key1": 1, "key2": 2, "key3": 3, "key4": 4, "key5": 5}
# 最小元素
print(min(my_list)) # 1
print(min(my_tuple)) # 6
print(min(my_str)) # a
print(min(my_set)) # 11
print(min(my_dict)) # key1
9.3 通用类型转换
格式:
list(容器) 将给定容器转换为列表
tuple(容器) 将给定容器转换为元组
str(容器) 将给定容器转换为字符串
set(容器) 将给定容器转换为集合
注意:
- 除转换为字符串str( )外,其它转换都会丢失value。
演示:
my_list = [1, 2, 3, 4, 5]
my_tuple = (6, 7, 8, 9, 10)
my_str = "abcdefg"
my_set = {11, 12, 13, 14, 15}
my_dict = {"key1": 1, "key2": 2, "key3": 3, "key4": 4, "key5": 5}
# 1.转换为列表
print(list(my_list)) # [1, 2, 3, 4, 5]
print(list(my_tuple)) # [6, 7, 8, 9, 10]
print(list(my_str)) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(list(my_set)) # [11, 12, 13, 14, 15]
print(list(my_dict)) # ['key1', 'key2', 'key3', 'key4', 'key5']
# 2.转换为元组
print(tuple(my_list)) # (1, 2, 3, 4, 5)
print(tuple(my_tuple)) # (6, 7, 8, 9, 10)
print(tuple(my_str)) # ('a', 'b', 'c', 'd', 'e', 'f', 'g')
print(tuple(my_set)) # (11, 12, 13, 14, 15)
print(tuple(my_dict)) # ('key1', 'key2', 'key3', 'key4', 'key5')
# 3.转换为字符串
print(str(my_list)) # [1, 2, 3, 4, 5]
print(str(my_tuple)) # (6, 7, 8, 9, 10)
print(str(my_str)) # abcdefg
print(str(my_set)) # {11, 12, 13, 14, 15}
print(str(my_dict)) # {"key1": 1, "key2": 2, "key3": 3, "key4": 4, "key5": 5}
# 4.转换为集合
print(set(my_list)) # {1, 2, 3, 4, 5}
print(set(my_tuple)) # {6, 7, 8, 9, 10}
print(set(my_str)) # {'d', 'c', 'f', 'a', 'g', 'e', 'b'}
print(set(my_set)) # {11, 12, 13, 14, 15}
print(set(my_dict)) # {'key5', 'key4', 'key2', 'key3', 'key1'}
9.4 排序
格式:
# reverse默认为False,控制从小到大排序,True控制从大到小排序
sorted(容器, [reverse = True])
注意:
- 排序结果变为列表。
演示:
my_list = [2, 1, 5, 4, 3]
print(sorted(my_list)) # [1, 2, 3, 4, 5]
print(sorted(my_list, reverse=True)) # [5, 4, 3, 2, 1]
my_tuple = (9, 8, 6, 7, 10)
print(sorted(my_tuple)) # [6, 7, 8, 9, 10]
print(sorted(my_tuple, reverse=True)) # [10, 9, 8, 7, 6]
my_str = "cabdgef"
print(sorted(my_str)) # ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(sorted(my_str, reverse=True)) # ['g', 'f', 'e', 'd', 'c', 'b', 'a']
...