文章目录
通用操作
数学运算符
- +:用于拼接两个容器
- +=:用原容器与右侧容器拼接,并重新绑定变量
- *:重复生成容器元素
- *=:用原容器生成重复元素, 并重新绑定变量
- <,<=,>,>=,==,!=:依次比较两个容器中元素,一但不同则返回比较结果。
成员运算符
- 语法:
数据 in 序列
数据 not in 序列
- 作用:如果在指定的序列中找到值,返回bool类型
索引index
- 作用:定位单个容器元素
- 语法:容器[整数]
- 说明:
正向索引从0开始,第二个索引为1,最后一个为len(s)-1
反向索引从-1开始,-1代表最后一个,-2代表倒数第二个,以此类推,第一个是-len(s)
切片slice
- 作用:定位多个容器元素
- 语法:容器[(开始索引):(结束索引)(:(步长))]
- 说明:
小括号()括起的部分代表可省略
结束索引不包含该位置元素
步长是切片每次获取完当前元素后移动的偏移量
内建函数
len(x) 返回序列的长度
max(x) 返回序列的最大值元素
min(x) 返回序列的最小值元素
sum(x) 返回序列中所有元素的和(元素必须是数值类型)
字符串 str
由一系列字符组成的不可变序列容器,存储的是字符的编码值
编码
- 字节byte:计算机最小存储单位,等于8 位bit
- 字符:单个的数字,文字与符号
- 字符集(码表):存储字符与二进制序列的对应关系
- 编码:将字符转换为对应的二进制序列的过程
- 解码:将二进制序列转换为对应的字符的过程
- 编码方式:
ASCII编码:包含英文、数字等字符,每个字符1个字节
GBK编码:兼容ASCII编码,包含21003个中文;英文1个字节,汉字2个字节
Unicode字符集:国际统一编码,旧字符集每个字符2字节,新字符集4字节
UTF-8编码:Unicode的存储与传输方式,英文1字节,中文3字节
- 相关函数
ord(字符串):返回该字符串的Unicode码
chr(整数):返回该整数对应的字符串ord("a") # 97 ord("A") # 65 chr(97) # a
字面值
单引和双引号的区别
- 单引号内的双引号不算结束符
- 双引号内的单引号不算结束符
三引号作用
- 换行会自动转换为换行符\n
- 三引号内可以包含单引号和双引号
- 作为文档字符串
转义字符
- 改变字符的原始含义
\’ \” \””” \n \ \t \0 … - 原始字符串:取消转义
a = r'C:\newfile\test.py'
字符串格式化
- 定义:生成一定格式的字符串。
- 语法:字符串%(变量)
"我的名字是%s,年龄是%s" % (name, age)
- 类型码:
%s 字符串 %d整数 %f 浮点数 - format()函数:不需要考虑数据类型
"我的名字是{},年龄是{}".format(name, age)
列表 list
由一系列变量组成的可变序列容器
基础操作
-
创建列表:
列表名 = []
列表名 = list(可迭代对象)# 创建空列表 list01 = [] list02 = list() # 创建非空列表 list01 = [100,"python",True] # list(可迭代对象) list02 = list("人生苦短") # ['人', '生', '苦', '短']
-
添加元素:
列表名.append(元素)
列表.insert(索引,元素)# 追加:在列表的末尾添加 list01.append("HTML") # [100,"python",True,"HTML"] # 插入:在制定位置添加 list01.insert(1,"JS") # [100,"JS","python",True,"HTML"]
-
定位/修改元素:
列表名[索引] = 元素
变量 = 列表名[索引]list01[-1] # HTML
变量 = 列表名[切片] # 赋值给变量的是切片所创建的新列表
list01[:3] # [100, 'JS', 'python']
列表名[切片] = 容器 # 右侧必须是可迭代对象,左侧切片没有创建新列表
# 遍历[10,20],将每个元素赋值给切片位置的元素 list01[-1:] = [10,20] # [100,"JS","python",True,10,20] list01[-2:] = "ok" # [100,"JS","python",True,"o","k"]
遍历列表:
# 正向: for 变量名 in 列表名: 变量名就是元素 # 反向: for 索引名 in range(len(列表名)-1,-1,-1): 列表名[索引名]就是元素
-
删除元素:
列表名.remove(元素)
del 列表名[索引或切片]# 根据元素移除 list01.remove("JS") # [100,"python",True,"o","k"] # -- 根据索引/切片删除 del list01[0] # ["python",True,"o","k"] del list01[-2:] # ["python",True]
列表VS字符串
- 列表和字符串都是序列,元素之间有先后顺序关系
- 字符串是不可变的序列,列表是可变的序列
- 字符串中每个元素只能存储字符,而列表可以存储任意类型
- 列表和字符串都是可迭代对象
列表推导式
- 定义:使用简易方法,将可迭代对象转换为列表
- 语法:
变量 = [表达式 for 变量 in 可迭代对象]
变量 = [表达式 for 变量 in 可迭代对象 if 条件]
- 说明:如果if真值表达式的布尔值为False,则可迭代对象生成的数据将被丢弃
列表推导式嵌套
- 语法:
变量 = [表达式 for 变量1 in 可迭代对象1 for 变量2 in可迭代对象2] - 传统写法:
result = [] for r in ["a", "b", "c"]: for c in ["A", "B", "C"]: result.append(r + c)
- 推导式写法:
result = [r + c for r in list01 for c in list02]
元组 tuple
由一系列变量组成的不可变序列容器。
基础操作
- 创建空元组:
元组名 = ()
元组名 = tuple()tuple01 = (1, 2, 3, 4, 5) list01 = [6, 7, 8, 9] # 预留空间 --> 按需分配 tuple02 = tuple(list01) # 按需分配 --> 预留空间 list02 = list(tuple01)
- 创建非空元组:
元组名 = (20,)
元组名 = (1, 2, 3)
元组名 = 100,200,300
元组名 = tuple(可迭代对象)# (元素) --> 元素 # (元素,) --> 元组 tuple03 = (10,)
- 获取元素:
变量 = 元组名[索引]
变量 = 元组名[切片] # 赋值给变量的是切片所创建的新列表tuple04 = ("张三", "李四") name01, name02 = tuple04
- 遍历元组(同列表)
作用
- 元组与列表都可以存储一系列变量,由于列表会预留内存空间,所以可以增加元素
- 元组会按需分配内存,所以如果变量数量固定,建议使用元组,因为占用空间更小
- 应用:
变量交换的本质就是创建元组:x, y = (y, x)
格式化字符串的本质就是创建元祖:“姓名:%s, 年龄:%d” % (“tarena”, 15)
字典 dict
- 由一系列键值对组成的可变散列容器
- 散列:对键进行哈希运算,确定在内存中的存储位置,每条数据存储无先后顺序
- 键必须惟一且不可变(字符串/数字/元组),值没有限制
基础操作
-
创建字典:
字典名 = {键1:值1,键2:值2}
字典名 = dict (可迭代对象)dict01 = {} dict02 = dict() dict01 = {"张三": 180, "李四": 160, "王五": 170} # 其他可迭代对象(格式) --> 字典 dict02 = dict([("张三", 180), ("李四", 160)]) # 字典 --> 列表(键) list01 = list(dict01) # ["张三","李四","王五"]
-
添加/修改元素:
语法:字典名[键] = 数据
说明:键不存在,创建记录
键存在,修改值# 添加(key不存在) dict01["赵六"] = 190 # {'张三': 180, '李四': 160, '王五': 170,'赵六': 190} # 修改(key存在) dict01["张三"] = 185 # {'张三': 185, '李四': 160, '王五': 170,'赵六': 190}
-
获取元素:变量 = 字典名[键] 键值存在返回value,不存在则报错
-
遍历字典:
# 获取所有key for key in dict01: print(key) # 获取所有value for value in dict01.values(): print(value) # 获取所有key--value for kv in dict01.items():# 遍历结果是元组 print(kv) for key,value in dict01.items(): print(key) print(value)
-
删除元素:
del 字典名[键]
字典推导式
- 定义:使用简易方法,将可迭代对象转换为字典
- 语法:
{键:值 for 变量 in 可迭代对象}
{键:值 for 变量 in 可迭代对象 if 条件}
字典 VS 列表
- 都是可变容器。
- 获取元素方式不同,列表用索引,字典用键
- 字典的插入,删除,修改的速度快于列表
- 列表的存储是有序的,字典的存储是无序的
集合 set
- 由一系列不重复的不可变类型变量(元组/数/字符串)组成的可变散列容器
- 相当于只有键没有值的字典(键是集合的数据)。
基础操作
- 创建空集合:
集合名 = set()
集合名 = {1, 2, 3}
集合名 = set(可迭代对象)set01 = {"悟空", "唐僧"} # 创建空集合 set02 = set() list01 = ["悟空", "唐僧", "悟空", "八戒"] set02 = set(list01) # {'唐僧', '八戒', '悟空'}
- 添加元素:
集合名.add(元素)set02.add("小白龙") ## {'悟空', '唐僧', '沙僧', '八戒'}
- 删除元素:
集合名.discard(元素)set02.discard("悟空") # {'沙僧', '唐僧', '八戒'}
运算
- 交集&:返回共同元素。
s1 = {1, 2, 3} s2 = {2, 3, 4} s3 = s1 & s2 # {2, 3}
- 并集:返回不重复元素
s4 = s1 | s2 # {1, 2, 3, 4}
- 补集-:返回只属于其中之一的元素
s1 - s2 # {1} 属于s1但不属于s2
- 补集^:返回不同的的元素
s5 = s1 ^ s2 # {1, 4} 等同于(s1-s2 | s2-s1)
- 子集<:判断一个集合的所有元素是否完全在另一个集合中
- 超集>:判断一个集合是否具有另一个集合的所有元素
s1 = {1, 2, 3} s2 = {2, 3} s2 < s1 # True s1 > s2 # True
- 相同或不同== !=:判断集合中的所有元素是否和另一个集合相同。
子集或相同,超集或相同 <= >=s1 = {1, 2, 3} s2 = {3, 2, 1} s1 == s2 # True s1 != s2 # False
集合推导式
- 定义:使用简易方法,将可迭代对象转换为集合。
- 语法:
{表达式 for 变量 in 可迭代对象}
{表达式 for 变量 in 可迭代对象 if 条件}
固定集合 frozenset
不可变的集合
固定集合可以作为字典的键,还可以作为集合的值。
基础操作
创建固定集合:frozenset(可迭代对象)
运算
等同于set