切片操作
容器中的元素按照特定顺序排列,可以通过索引访问对应元素,这样的容器类型称为序列类型,
包括 : 列表,字符串,元组
序列类型的协议 :
s = [1, 2, 3, 4, 5]
索引(从0开始,支持负数)s[0] # 1s[-1] # 5(最后一个)切片 start:stop:steps[1:4] # 2, 3, 4s[::-1] # 5, 4, 3, 2, 1(反转)成员检测3 in s # True长度与极值len(s) # 5min(s), max(s)拼接与重复s + 6, 7 # 1, 2, 3, 4, 5, 6, 7s * 2 # 1, 2, 3, 4, 5, 1, 2, 3, 4, 5迭代for item in s:print(item)
切片操作:
不是”只有序列类型才满足以上特性,非序列类型一个特性都不满足”,有些非序列类型也满足一部分特性
切片操作范围前闭后开!
开始 : 结束 这个范围方向和步长方向需要保持一致!
正向切片的内容保持正向,反向切片的内容会被逆置
关于容器的附带方法,一般情况下,x.remove()是按照元素值删除,x.pop()方法是按照位置删除,不同的容器类型,其附带方法会有细微差异
对于Python 内置的可变容器的附带方法, 基本遵循如下返回规则: 纯修改 → None,删除东西 → 返回被删的,查改一体 → 返回查询结果
1.列表list
注意提供了两种索引
可以看作允许存放不同数据类型的”数组”
可以通过: del list[0]删除列表list的第一个元素
大多数方法返回None,不用使用对象接收结果,可以使用 is None/is not None来判断返回结果情况
注意! s.sort()默认升序

组包操作: 将一个一个独立的元素合并到一个数据容器中
解包操作: 将数据容器解开成一个一个独立的元素,使用 * 运算符,如: list=[*liist1 + *list2]
可以使用 + 运算符快速将两个列表合并
列表推导式: 按照一定的规则快速生成一个满足特定条件的列表,类似正则表达式,
如: list=[i**2 for i in range(1,21) if i%2==0]
推导式的内容可以理解为 :
- 数据在哪?
- 满足什么条件?
- 要怎么处理后再放置?
2.字符串str
注意字符串不支持修改操作!
字符串以子串为处理单位(子串既包含单个字符也包含多个字符的组合,适用范围更广)
因为字符串的不可变性,所以那些看似会更改内容的方法会返回一个新的字符串
s.split()会将切割后的结果以列表的形式返回
3.元组tuple
元组也为序列类型,支持切片操作
元组与列表唯一的区别就是不可修改! 因此元组可以视为可存放不同类型元素,不可修改的数组
注意单个元素的元组定义: t1=(100,)
组包和解包:
定义元组其实就是组包操作;
解包操作可以逐个变量一一对应的分配; 也可以使用 * 运算符来拓展解包,用于元素数量未知的情况;
此时可以把使用 * 运算符的接收对象看作一个空容器,先解包为”0个元素”,然后接受对应范围的元素,再组包为一个列表
python中便携的批量数据交换其实就是利用了元组的组包和解包操作, 如: b,c,a=a,b,c 右侧进行组包操作(定义元组),左侧进行一个基础解包操作
4.集合set
集合不属于序列,不支持索引访问
注意空集合定义方式只有s=set()一种,s={}定义的是空字典(字典是牢大,独占了d={}这种空字典定义方式,而留给空集的定义方式就只有s=set()了)
大多数方法返回None,不用使用对象接收结果
集合具有可修改性!
s1.remove()方法会删除指定的元素
s1.pop()方法因为集合的无序性,会随机弹出一个元素,返回被弹出的元素
可以使用 & 符号求交集: s=s1&s2;
使用 | 符号求并集: s=s1|s2;
使用 - 求差集: s=s1-s2
集合推导式: 快速构建一个集合,与列表推导式类似
如: s={i for i in s1 if i not in s2}
5.字典dict
字典按照key来存取的,不是索引
字典可修改(就像随着时间变化,某些字词的含义要更新一样)
字典的key必须为不可变数据类型(如str,int,float.tuple等),不能重复; value可以为任意数据类型
如果重复,后值会覆盖前值
添加和修改的操作是一样的,系统会自动检测key :
如果key不存在,则添加,如果key存在,则修改
字典的常见遍历格式:
for key,value in dict1.items():
print(f"key:{key}, value:{value}")
