--- title: List Methods fid: 20240929-171318 tags: list, list method --- # List Methods **难度**: 2 **时长**: 20 min ## List 方法 List 支持(不限于)以下 **方法** [^method-vs-function]: - `lst.append()` - `lst1.extend(lst2)` 与 `lst1 + lst2` 的联系与区别 - `lst.insert()`: 如 [1, 2, **3** , 5, 6, 7] 的 3 后插入 4 - `lst.copy()` 可以解决前面的赋值引用后修改副作用的问题 - `lst.count()` - `lst.index()`: 比 `in` 更进一步,找出位置 - `lst.clear()` 与 `del` 的区别 - `lst.remove(x)`:删除第1个值为 `x` 的元素 - `lst.pop()`: 将尾部元素弹出 - `lst.reverse()`: 将更表元素前后反序重排 - `lst.sort()` [^method-vs-function]: **方法**是一个对象/类所拥有的功能,是专门用于该类对象的函数。你可以访问 [Difference between Method and Function in Python](https://www.tutorialspoint.com/difference-between-method-and-function-in-python) 阅读多例子。 最常用的方法是: `append()`, `sort()`, `copy()`, `del` ## 添加(多个)元素 `append()`, `extend()`, `insert()`, `copy()`, (` = `) **问题:** 1. 在 `a = [1,2,3,4,5,6,7]` 后面添加成员 `8`。 2. 在 `a = [1,2,3,4,5,6,7]` 后面添加成员 `8, 9, 10`。 3. 在 `a = [1,2,3,4,5,6,7]` 最前面添加成员 `0`。 注意: 在 LIST 不同位置新增成员时,计算开销可能显著不同。 ## 删除元素 `pop()`, `remove()`, (`del`) **问题:** 1. 删除 `a= [1,2,3,4,5,6,7]` 中的成员 `7`。 2. 删除 `a= [1,2,3,4,5,6,7]` 中的成员 `1`。 3. 删除 `a= [1,2,3,4,5,6,7]` 中的成员 `4`。 注意: 在 LIST 不同位置删除成员时,计算开销可能显著不同。 ## 查找元素 `in`, `count()`, `index()` **问题:** 1. 判断 `1`, `3`, `5` 是否位于列表 `a = [1,2,3,4,5,6,7,1,2,3]` 中。 2. 计数 `1`, `3`, `5` 分别在列表 `a = [1,2,3,4,5,6,7,1,2,3]` 中出现了几次。 3. 寻找 `1`, `3`, `5` 分别在列表 `a = [1,2,3,4,5,6,7,1,2,3]` 中出现的位置。 以上三个问题如果不用 **LIST** 方法,而是自己定义函数,能不能写出来? ## max, min, sort, len 在 python console 中执行下面的代码,观察结果。如果遇到错误,把错误的地方修改正确。 ```python >>> numbers = [100, 34, 678] >>> len(numbers) >>> max(numbers) >>> min(numbers) >>> week=["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] >>> Max(week) >>> Min(week) >>> Max("Monday") >>> week.sort() ``` 说一说 `len()`、 `max()`、 `min()`、 `sort()` 的作用及特点。 ## 成员排序 sort() `reverse()`, `sort()` **问题:** 1. 对 `x = [3,1,2,6,5,4, 3]` 成员按从小到大顺序排序; 2. 对 `x = [3,1,2,6,5,4, 3]` 成员按从大到小次序(逆序)排序 (试给出两种解法); ```python >>> x = [3,1,2,6,5,4, 3] >>> x.sort() ``` ### 令人困惑的地方 sort 已知 x, 希望将 x 排序的结果放在 y。读下面的程序,解释引起错误的原因: ```python >>> x = [4, 6, 2, 1, 7, 9] >>> y = x.sort() # Don't do this! >>> print(y) None ``` 以下哪种方法可行? 方法 1: ```python >>> x = [4, 6, 2, 1, 7, 9] >>> y = x >>> y.sort() >>> print(y) >>> print(x) ``` 方法 2: ```python >>> x = [4, 6, 2, 1, 7, 9] >>> y = x.copy() >>> y.sort() ``` 方法 3: ```python >>> x = [4, 6, 2, 1, 7, 9] >>> y = sorted(x) ``` **练习** : 将 `'hello world'` 中的所包含的全部字母按字母顺序排序 ### 文件排序 希望得到 **顺序排列的当前目录下的文件列表** ,以下两个代码片断哪个是正确 / 错误的? 即希望实现在 linux 系统中的 `$ ls | sort` 命令的效果(在 windows 中不一定有效)。 因为 Python 程序是跨平台的, 意味着一处在不同的系统中都是通用的。 ```python # 1 import os fls = os.listdir(".").sort() # 链式操作 # 2 fls = os.listdir(".") fls.sort() ``` 错误分析: ### Sort 高级排序 - 逆序排序 - 按长度排序 - 按第3个字母排序 ```python >>> x = ['aardvark', 'abalone', 'acme', 'add', 'aerate’] >>> x.sort(reverse=True) >>> x.sort(key=len) >>> x.sort(key=lambda item:item[2]) ``` ### 练习 1. 请按最后一个字母排序 2. 回到前面的例子,按文件(夹)倒序排名