在python内定义函数时处理列表后传递列表时的一个小知识点

前些天写python题目的时候,发现一个应该算是我之前忽略一个知识点,在网络上查阅不到较为详细的内容,我想应该属于映射方面的知识点。

于是我自己总结了一下这个小经验,也可以供大家参考一下。

当我定义了一个函数以后,我往函数内部传递了一个列表,并对列表进行处理,处理完后,我想返回一个列表,依次保存我每次列表处理时的变化,也方便我检查我的代码,代码如下:

def arrange(list1):
    result = []
    for i in range(1,len(list1)): 
        temp = list1[i]
        pos = i
        for k in range(i-1,-1,-1):
            if temp < list1[k]:
                list1[k+1] = list1[k] 
                pos = k
        list1.pop(pos)
        list1.insert(pos,temp)
        result.append(list1)
    return result

当我去调用这个函数时:

result = arrange([5,4,3,2,1])
print(result)

我发现输出的结果如下:

[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]

它并没有把我每次做的处理后的列表记录下来,而是直接记录了最终值。

我预期的结果应该是:

[[4, 5, 3, 2, 1], [3, 4, 5, 2, 1], [2, 3, 4, 5, 1], [1, 2, 3, 4, 5]]

当我尝试了一下修改后发现了需要传递的是它的一个映射副本,不然在函数内传递这个列表,就会直接传递最终处理后的值,解决方法很简单,只需要在传递时传统它的副本就行,更改后的代码如下:

def arrange(list1):
    result = []
    for i in range(1,len(list1)): 
        temp = list1[i]
        pos = i
        for k in range(i-1,-1,-1):
            if temp < list1[k]:
                list1[k+1] = list1[k] 
                pos = k
        list1.pop(pos)
        list1.insert(pos,temp)
        result.append(list1[:])
    return result
result = arrange([5,4,3,2,1])
print(result)

输出结果:

[[4, 5, 3, 2, 1], [3, 4, 5, 2, 1], [2, 3, 4, 5, 1], [1, 2, 3, 4, 5]]

能够记录每一次处理后列表的变化,也就和我预期的一模一样了。

Python函数是一段可重复使用的代码块,用于执行特定的任务。函数可以接受输入参数,并返回输出结果。以下是Python函数的一些知识点: 1. 定义函数:使用关键字`def`来定义函数,后面跟着函数名和参数列表函数体内的代码块需要缩进。 示例: ```python def greet(name): print("Hello, " + name + "!") ``` 2. 参数传递函数可以接受零个或多个参数。参数可以是必需的(必须提供)或可选的(可以省略)。参数可以是位置参数或关键字参数。 示例: ```python def add_numbers(a, b): return a + b result = add_numbers(3, 5) # 位置参数 print(result) # 输出:8 def multiply_numbers(x, y=2): return x * y result = multiply_numbers(4) # 关键字参数 print(result) # 输出:8 ``` 3. 返回值:函数可以使用`return`语句返回一个值。如果没有明确指定返回值,则函数默认返回`None`。 示例: ```python def square(x): return x * x result = square(3) print(result) # 输出:9 ``` 4. 函数文档字符串:可以使用文档字符串(docstring)来描述函数的功能、参数和返回值等信息。文档字符串位于函数定义的第一行或第二行。 示例: ```python def greet(name): """ 打印问候语 参数: - name: 姓名 """ print("Hello, " + name + "!") ``` 5. 匿名函数(Lambda函数):使用`lambda`关键字可以创建匿名函数,这些函数没有函数名,通常用于简单的功能。 示例: ```python square = lambda x: x * x result = square(3) print(result) # 输出:9 ``` 6. 函数作为参数:在Python中,函数可以作为参数传递给其他函数,也可以作为返回值返回。 示例: ```python def apply_operation(x, y, operation): return operation(x, y) def add(x, y): return x + y result = apply_operation(3, 5, add) print(result) # 输出:8 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值