1. Python 序列分类
1.1. 按存储数据类型分类
- 容器序列, – 定义:容器序列可以存放不同类型的数据,即可以存放任意类型对象的引用; – 包括:list,tuple,deque;
- 扁平序列 – 定义:扁平序列只能容纳一种类型,也就是说其存放的是值而不是引用,扁平序列其实是一段连续的内存空间,由此可见扁平序列其实更加紧凑。但是它里面只能存放诸如字符、字节和数值这种基础类型。 – 包括:str,bytes,bytearray,array.array;
1.2. 按是否可变分类
- 可变序列 – list,deque,bytearray,array;
- 不可变序列 – str,tuple,bytes;
2. append & extend
- append
– append 对不同类型的序列进行新增操作,是把新增序列作为一个元素添入;
>>> a = [1, 2, 3] >>> b = (4, 5) >>> >>> a.append(b) >>> print(a) [1, 2, 3, (4, 5)] # 注意:(4, 5) 是一个元组
- extend
– extend 对不同类型的序列进行新增操作,会先 for 循环遍历新增序列中的元素,然后把这些元素逐个添入;
>>> a = [1, 2, 3] >>> b = (4, 5) >>> >>> a.extend(b) >>> print(a) [1, 2, 3, 4, 5] # 注意:4, 5 作为单独的元素出现在新列表
3. 序列切片
- 列表全部元素组成新列表
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> >>> print(sample_list[::]) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- 列表全部元素组成 倒序 新列表
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> >>> print(sample_list[::-1]) [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
- 奇数位 元素组成新列表
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> >>> print(sample_list[::2]) # 2 为步长,表示每隔一位取一个元素 [1, 3, 5, 7, 9]
- 偶数位 元素组成新列表
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> >>> print(sample_list[1::2]) [2, 4, 6, 8, 10]
- 指定起始结束位置 截取列表
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> >>> print(sample_list[3:6]) [4, 5, 6]
- 切片 结束位大于列表长度
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> >>> print(sample_list[0:100]) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- 切片 初始位大于列表长度
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> >>> print(sample_list[100:]) []
- 尾部增加 新元素
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> sample_list[len(sample_list):] = ["new"] >>> print(sample_list) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'new']
- 头部增加 新元素
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> sample_list[:0] = ["new_1", "new_2"] >>> print(sample_list) ['new_1', 'new_2', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- 指定位置 增加元素
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> sample_list[3:3] = ["new_1"] >>> print(sample_list) [1, 2, 3, 'new_1', 4, 5, 6, 7, 8, 9, 10]
- 替换 指定起始位置 多位元素,= 号两边元素 数量相同
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> sample_list[:3] = ["new_1", "new_2", "new_3"] >>> print(sample_list) ['new_1', 'new_2', 'new_3', 4, 5, 6, 7, 8, 9, 10]
- 替换 指定起始位置 多位元素,= 号两边元素 数量不同
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> sample_list[:3] = ["new_1", "new_2"] # =号左侧 3 个元素,=号右侧 2 个元素 >>> print(sample_list) ['new_1', 'new_2', 4, 5, 6, 7, 8, 9, 10] # 注意:3 没有了,但并没有被替换成新元素
- 奇数位 替换 同一元素,= 号两边元素 数量相同
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> sample_list[::2] = [0] * 5 >>> print(sample_list) [0, 2, 0, 4, 0, 6, 0, 8, 0, 10]
- 奇数位 替换 同一元素,= 号两边元素 数量不同,会报错!
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> sample_list[::2] = [0] * 3 # = 号左侧 5 个元素,=号右侧 3 个元素 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: attempt to assign sequence of size 3 to extended slice of size 5
- 奇数位 替换 不同元素,= 号两边元素 数量相同
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> sample_list[::2] = ["a", "b", "c", "d", "e"] >>> print(sample_list) ['a', 2, 'b', 4, 'c', 6, 'd', 8, 'e', 10]
- 奇数位 替换 不同元素,= 号两边元素 数量不同
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> sample_list[::2] = ["a", "b", "c"] # = 号左侧 5 个元素,=号右侧 3 个元素 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: attempt to assign sequence of size 3 to extended slice of size 5
- 删除指定起始位置 元素
>>> sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> sample_list[:3] = [] # 删除前三位 >>> print(sample_list) [4, 5, 6, 7, 8, 9, 10]
4. array 数组
- 与 list 不同,array 只能存放指定的数据类型;
- array 的性能要比 list 高很多;