1、数据容器分类
数据容器(一共五个)可以从以下视角进行简单的分类:
·是否支持下标索引
支持:列表、元组、字符串(序列类型)
不支持:集合、字典(非序列类型)
·是否支持重复元素:
支持:列表、元组、字符串(序列类型)
不支持:集合、字典(非序列类型)
·是否可以修改
支持:列表、集合、字典
不支持:元组、字符串列表:[] 元组:() 字符串:" " 集合:{}
列表 元组 字符串 集合 字典 形式 list1 = ['Hello', 111, True] 变量名称 = ((1, 2, 3), (4, 5, 6))
t2 = (1, 2, ['Hello', 'World'])
"abscl" {"1","a","3","asd"} {
"key1" : value1,
"key2" : value2"key3" : {"key" : value}
}元素数量 支持多个 支持多个 支持多个 支持多个 支持多个 元素类型 任意 任意 仅字符 任意 key:除字典外任意类型
Value:任意类型下标索引 支持 支持 支持 不支持 不支持 重复元素 支持 支持 支持 不支持 不支持 可修改性 支持 不支持 不支持 支持 支持 数据有序 是 是 是 否 否 for循环 都支持 while循环 支持 支持 支持 不支持 不支持 使用场景 可修改、可重复的 不可修改、可重复的 一串字符 不可重复的 以key检索Value的
2、数据容器的通用操作
1、遍历
首先,在遍历上,他们都支持遍历操作:
5类数据容器部支持for循环遍历
列表、元组、字符串支持while循环,集合、字典不支持(无法下标索引)
2、推导式****
推导式包括:列表推导式、元组推导式、字典推导式、集合推导式。
推导式(又称解析器),是 Python 独有的一种特性。使用推导式可以快速生成列表、元组、字典以及集合类型的数据。
1、列表推导式
其实就是在for循环中,如果循环中的表达式是对可迭代对象遍历进行操作,从而转换成新的数据的话,就可以使用推导式,可以快速生成一个满足指定需要的列表。推导式只是对 for 循环语句的格式做了一下简单的变形,并用 [ ] 括起来,不同之处在于,推导式最终会将循环过程中,计算表达式得到的一系列值组成一个列表。
列表推导式的语法格式如下:
[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]]
此格式中,[if 条件表达式] 不是必须的,可以使用,也可以省略。最外侧的【】是一定要存在的。其中的表达式其实就是 for 循环中的循环体,推导式的执行顺序如下所示:
for 迭代变量 in 可迭代对象 表达式
例如:
# 推导式 a_list = [x * x for x in range(10)] # 等同于 for x in range(10): a_list += x * x
输出结果:[0 , 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64, 81]
还可以在列表推导式中添加 if 条件语句,这样列表推导式将只迭代那些符合条件的元素。例# 推导式 a_list = [x * x for x in range(10) if range(10) % 2 == 0]
多个循环:
dd_list = [(x, y) for x in range(5) for y in range(4)] # 等同于↓ dd_list = [] for x in range(5): for y in range(4): dd_list.append((x, y))
输出结果:
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)]
2、元组推导式元组推导式的语法格式如下:
(表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] )
元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是 [],其它完全相同。用法也完全相同。例如,我们可以使用下面的代码生成一个元组:
a = (x for x in range(10)) b = tuple(a) print(f"a = {a},b = {b}") # 输出结果是 a = <generator object <genexpr> at 0x10556b510>,b = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) # tuple()用于将其他可迭代对象(如列表、字符串、元组等)转换为元组类型
从上面的执行结果可以看出,使用元组推导式生成的结果并不是一个元组,而是一个生成器对象,这一点和列表推导式是不同的。
也可以直接使用 for 循环遍历生成器对象,可以获得各个元素,例如:
a = (x for x in range(1,10))
for i in a:
print(i,end=' ')但是最好还是使用tuple函数
3、字典推导式
字典推导式的语法格式如下:
{表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]}
例如:listdemo = ['Jack','Tom'] #将列表中各字符串值为键,各字符串的长度为值,组成键值对 newdict = {key:len(key) for key in listdemo} print(newdict) # 输出结果:{'Jack': 4, 'Tom': 3}
4、集合推导式集合推导式的语法格式和字典推导式完全相同,如下所示:
{ 表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] }
集合推导式和字典推导式的格式完全相同,那么给定一个类似的推导式,如何判断是哪种推导式呢?最简单直接的方式,就是根据表达式进行判断,如果表达式以键值对(key:value)的形式,则证明此推导式是字典推导式;反之,则是集合推导式,集合中的元素是唯一的。例如:
setnew = {i**2 for i in range(3)} print(setnew) # 输出结果: {0, 1, 4}
# 保存在集合中的元素必须是唯一的。 tupledemo = (1,1,2,3,4,5,6,6) setnew = {x**2 for x in tupledemo if x%2==0} print(setnew) # 输出结果:{16, 4, 36}
3、len()、max()、min()等统计类的函数
字符串大小比较时是基于ASCII码值来比较的,即max(字符串)会输出字符串中ASCII码值最大的元素。
字符串与字符串之间如何比较?
从头到尾入一位位进行比较,其中一位大,后面就无需比较了。
单个字符之间如何确定大小?
通过ASC川码表,确定字符对应的码值数字来确定大小4、互相转换
list(其他数据容器类型):转换为列表(list)类型
str(其他数据容器类型):转换为字符串类型
tuple(其他数据容器类型):转换为元组类型
set(其他数据容器类型):转换为集合类型
值得注意的是:字符串转换时,会将字符串中每一个字符转换为一个元素。
字典转换时,会将字典中的Value抛弃掉,只留下key作为元素。
但是其他类型不可以转成字典,因为没有Value,无法组成键值对。
5、排序功能 sorted(数据容器, [ reverse = True])reverse = True是翻转的意思,将“从小到大升序排序”的结果翻转,reverse = False则不翻转。
不写 [ reverse = True]默认为False。
同样,字典排序会丢失Value,只对Key排序。