# Day04 ## 列表的序列操作 1. 切片 格式: 列表名\[start, stop\[, step\]\] 2. 遍历 3. 序列解包 \(使用多个变量接受列表中的数据\) ```python num1, num2 = [1, 2] # (num1, num2) 1, 2 num3, *num4 = [1,2,3,4,5] # (num3, num4) 1, [2,3,4,5] *num5, num6 = [1,2,3,4,5] # (num5, num6) [1,2,3,4], 5 ``` 4. 列表内置方法 `dir(list)`: 查看列表内置方法 * 增加方法 | 方法 | 描述 | | :---: | :---: | | **append** | 追加,在列表末尾追加指定的元素 | | extend | 将指定序列元素依次追加到列表尾部\(合并\),不去重 \(与两列表相加类似\) | | **insert** | 将指定元素插入到对应索引位上,注意负索引倒序插入,超出索引会在末尾插入 | ```text # append() >>> a = [1,2,3,4] >>> a.append(1) >>> a [1, 2, 3, 4, 1] # extend() >>> a.extend("5") >>> a [1, 2, 3, 4, 1, '5'] # insert() >>> a [1, 2, 3, 4, 1, '5'] >>> a.insert(2, 8) >>> a [1, 2, 8, 3, 4, 1, '5'] ``` * 删除方法 | 方法 | 描述 | | :---: | :---: | | **pop** | 移除列表中的一个元素 \(默认最后一个\),并且返回该元素的值 | | **remove** | 移除列表中某个值的第一个匹配项,没有返回 | | del | 删除整个列表或列表的某个值\(物理意义上\),del 为 python 内置功能,不是列表独有 | | clear | 清空列表 | ```text # pop() >>> a.pop() '5' >>> a [1, 2, 8, 3, 4, 1] # remove() >>> a.remove(8) >>> a [1, 2, 3, 4, 1] # del >>> del a >>> a Traceback (most recent call last): File "", line 1, in NameError: name 'a' is not defined # clear() >>> a = [1, 2, 3, 4, 1] >>> a.clear() >>> a [] ``` * 修改 | 方法 | 描述 | | :---: | :---: | | reverse | 倒序排序 | | sort\(self, axis=-1, kind=None, order=None\[, reverse=True\]\) | 排序,按 ASCII 码表, list.sort\(\) 排序后原数组顺序发生改变, reverse=True做降序 | | sorted\(list\) | 对列表、字典、元组里面的数据进行排序,排序后原数组顺序未发生改变 \(Python 内置函数\) | ```text # reverse() >>> a = [1, 2, 3, 4, 1] >>> a.reverse() >>> a [1, 4, 3, 2, 1] # sort() >>> a.sort() >>> a [1, 1, 2, 3, 4] # sorted() >>> a [1, 1, 2, 3, 4] >>> sorted(a, reverse=True) [4, 3, 2, 1, 1] >>> a [1, 1, 2, 3, 4] ``` * 查找 | 方法 | 描述 | | :---: | :---: | | count | 计数,统计要计数元素在列表中的个数 | | index\(data\[, start, end\]\) | 从列表 \(可以指定查询范围\) 中找出某个值的第一个匹配项的索引 | | len\(list\) | Python 内置方法,返回列表长度\(有多少元素\) | ```text # count() >>> a [1, 1, 2, 3, 4] >>> a.count(1) 2 # index() >>> a.index(2) 2 # len() >>> len(a) 5 ``` 5. 列表的深浅拷贝 * python **六种数据类型** * **可变**: 列表、字典、集合 * **不可变**: 数值、字符串、元组 * 重新赋值: 将**新的变量名指向原地址** * 拷贝: list.copy\(\) \(只拷贝了外层列表,内层指向地址不变,受原列表修改影响\) \(只对外层数据,在内存中重新开辟了控件存储\) * **深拷贝**: * import copy * list.deepcopy\(\) \(重新分配一个地址,存储被复制的内容,不受原列表修改影响\) 6. 列表推导式 \(通过一个列表快速生成一个新的列表\) * 变量名 = \[表达式 for 变量 in 列表\] \(无条件筛选\) * 变量名 = \[表达式 for 变量 in 列表 if 条件\] \(有条件筛选\) * 执行流程: 通过 for 循环将类表中的数据进行遍历,在通过 if 筛选,然后满足条件的放入新的列表