首页 > 试题广场 >

以下哪些属于“列表对象的方法”,并且会就地修改该列表(不返回

[不定项选择题]
以下哪些属于“列表对象的方法”,并且会就地修改该列表(不返回新的列表)?
  • A.len()
  • B.sort()
  • C.append()
  • D.pop()
好的,这是一个非常重要且实用的 Python 知识点。我们来系统地总结一下。 核心原则是:**如果一个方法的目的就是改变列表的内容(如排序、增删元素),它通常是就地修改,返回 `None`。如果一个方法的目的是为了获取一个信息(如索引、计数)或生成一个新列表,它通常会返回一个值,而不修改原列表。** --- ### 会就地修改列表的方法(返回 `None`) 这些方法直接改变原列表,调用后原列表的内容会发生变化。 | 方法 | 作用 | 返回值 | | :--- | :--- | :--- | | `list.append(x)` | 在末尾添加一个元素 `x` | `None` | | `list.extend(iterable)` | 将可迭代对象中的所有元素添加到末尾 | `None` | | `list.insert(i, x)` | 在索引 `i` 处插入元素 `x` | `None` | | `list.remove(x)` | 删除第一个值为 `x` 的元素 | `None` | | `list.pop([i])` | 删除并返回指定索引的元素(默认最后一个) | **被删除的元素** | | `list.clear()` | 删除列表中的所有元素 | `None` | | `list.sort(key=None, reverse=False)` | 对列表进行原地排序 | `None` | | `list.reverse()` | 将列表中的元素原地反转 | `None` | **特别注意 `list.pop([i])`**:它是这个类别中的一个特例,因为它既就地修改了列表,**又返回了一个值**(被删除的元素)。这是唯一一个具有这种行为的常用列表方法。 **示例:** ```python my_list = [3, 1, 4, 1, 5] # 这些操作都修改了 my_list,但通常返回 None result = my_list.append(9) print(result) # 输出:None print(my_list) # 输出:[3, 1, 4, 1, 5, 9] result = my_list.sort() print(result) # 输出:None print(my_list) # 输出:[1, 1, 3, 4, 5, 9] # pop 既修改又返回值 popped_item = my_list.pop(0) print(popped_item) # 输出:1 print(my_list) # 输出:[1, 3, 4, 5, 9] ``` 一个常见的错误是误以为这些方法返回修改后的列表: ```python # 错误示范 my_list = [3, 1, 4] new_list = my_list.sort() # new_list 是 None,而不是排序后的列表 print(new_list) # 输出:None # 正确做法:先排序,再赋值(如果需要) my_list.sort() new_list = my_list ``` --- ### 不会就地修改列表的方法(返回新值/新列表) 这些方法不会改变原列表,而是返回一个新的对象或值。 | 方法 | 作用 | 返回值 | | :--- | :--- | :--- | | `list.copy()` | 返回列表的一个浅拷贝 | **新的列表对象** | | `list.index(x[, start[, end]])` | 返回第一个值为 `x` 的元素的索引 | **索引值 (整数)** | | `list.count(x)` | 返回元素 `x` 在列表中出现的次数 | **计数值 (整数)** | **示例:** ```python original_list = [1, 2, 3, 2] # copy() 返回一个新列表 new_list = original_list.copy() new_list.append(4) print(original_list) # 输出:[1, 2, 3, 2] (未改变) print(new_list) # 输出:[1, 2, 3, 2, 4] # index() 返回一个值 index_of_2 = original_list.index(2) print(index_of_2) # 输出:1 print(original_list) # 输出:[1, 2, 3, 2] (未改变) # count() 返回一个值 count_of_2 = original_list.count(2) print(count_of_2) # 输出:2 print(original_list) # 输出:[1, 2, 3, 2] (未改变) ``` --- ### 容易混淆的对比:`list.sort()` vs `sorted(list)` 这是一个经典的对比,可以帮助你记忆这个原则: - **`list.sort()`**:是列表的**方法**,**就地修改**列表,返回 `None`。 - **`sorted(list)`**:是Python的**内置函数**,**不修改**原列表,**返回一个新的排序后的列表**。 ```python my_list = [3, 1, 2] # 方法:就地修改 result_method = my_list.sort() print(result_method) # None print(my_list) # [1, 2, 3] (原列表被修改) my_list = [3, 1, 2] # 函数:返回新列表 result_func = sorted(my_list) print(result_func) # [1, 2, 3] (新列表) print(my_list) # [3, 1, 2] (原列表未变) ``` ### 总结表格 | 行为 | 方法 | | :--- | :--- | | **就地修改 (返回 None)** | `append`, `extend`, `insert`, `remove`, `clear`, `sort`, `reverse` | | **就地修改 (返回被删除项)** | `pop` | | **不修改 (返回新值/新列表)** | `copy`, `index`, `count` | 记住这个规律,你在使用列表方法时就能清楚地知道是在操作原对象,还是在创建一个新的对象,从而避免许多潜在的 bug。
发表于 今天 10:08:27 回复(0)