首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
以下哪些属于“列表对象的方法”,并且会就地修改该列表(不返回
[不定项选择题]
以下哪些属于“列表对象的方法”,并且会就地修改该列表(不返回新的列表)?
A.len()
B.sort()
C.append()
D.pop()
查看答案及解析
添加笔记
求解答(0)
邀请回答
收藏(70)
分享
1个回答
添加回答
1
牛客168850117号
好的,这是一个非常重要且实用的 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。
发表于 2025-12-01 10:08:27
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Python
难度:
1条回答
70收藏
359浏览
热门推荐
相关试题
在大语言模型中,什么是"Gated...
大模型开发
评论
(1)
下面关于 Java 中的异常处理说...
Java
评论
(1)
关于大模型“上下文窗口”的理解,以...
大模型概念
评论
(1)
Vue Router的全局前置守卫...
Vue
评论
(1)
在Vue.js中,组件data选项...
Vue
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题