python - Python在函数内切片列表
问题描述
我们可以在函数内就地更改列表的值吗?以下两段代码让我感到困惑。
def change_list(a):
a[0], a[1] = a[1], a[0]
return
a = [1, 2]
change_list(a)
a # this will output [2, 1]
上面的这个函数只是交换列表的第一个和第二个元素。
但是,当我将此函数包装在另一个函数中,并尝试通过在两个子列表上调用该函数两次来更改更长列表的值时change_list
,更改不再就地。
def change_parts_of_list(longer_a):
change_list(longer_a[0:2])
change_list(longer_a[2:4])
return
longer_a = [1, 2, 3, 4]
change_parts_of_list(longer_a)
longer_a # this will return [1, 2, 3, 4]
为什么第二个函数不返回 [2, 1, 4, 3]?
谢谢!关于这一点的一些上下文 - 我试图在 Python 列表上实现快速排序,并意识到我需要在函数中使用赋值语句。即以下代码输出正确的结果。
def change_list_modified(a):
a[0], a[1] = a[1], a[0]
return a
def change_parts_of_list_modified(longer_a):
longer_a[0:2] = change_list(longer_a[0:2])
longer_a[2:4] = change_list(longer_a[2:4])
return longer_a
longer_a = [1, 2, 3, 4]
change_parts_of_list(longer_a)
longer_a
解决方案
推荐阅读
- node.js - react-native init 挂在 macOS Catalina 上,使用 fetchMetadata: sill resolveWithNewModule react-native@0.64.2 检查可安装状态
- python - 来自多行/列 csv 的数据类
- javascript - 如何在 Jest 中使用 unmockedModulePathPatterns 和 automock 设置为 true?
- image - 如何处理在 Javascript 中单击按钮时生成随机图像的函数
- prometheus - InfluxQL 查询以计算 Grafana 中的 CPU 使用率百分比
- python - Structlog:如何测试哪个处理程序发出了什么
- node.js - 使用 Socket.io 从 NodeJS 获取数据到 Dart/Flutter
- java - 递归问题缺少乘法
- ruby-on-rails - 跳过特定控件内的验证
- c++ - 用另一个类修改对象