python中函数参数传入为list元素时不改变

本文探讨了Python中函数参数类型对排序问题的影响,特别强调了如何正确处理不可变与可变对象,通过实例和冒泡排序示例解析了change函数的问题,并给出了针对可变对象列表的改进排序方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在练习python实现数值排序问题时,遇到一个问题如下:
输入n个数,从小到大输出(没用sort方法):
#程序如下

num = str(input('input number:'))
num = num.split()
num =[int(k) for k in num]

def change(a,b):
    a,b = b,a
    return a,b
#冒泡排序
for i in range(len(num)-1):
	for j in range(len(num)-1-i):
		if num[j]>num[j+1]:
			change(num[j],num[j+1])
print(num)
#输入"3 2 1"
#理论输出 :[1,2,3],
#实际结果:[3,2,1],原封不动的输出

经过排查发现问题出在了change函数的参数上,原来python分为可变对象和不可变对象。当函数传入的为不可变对象时,值不会改变;若是可变对象,才会改变。
简单测试如下:

#c函数传入参数为number;为不可变对象
def c(a,b):
    a,b=b,a
    return a,b
m=1
n=2
print(c(m,n))
print(m)
#实际输出:
#(2,1)
#1
#稍作改变:
l=[1,2]
def c(l):
    l[0],l[1]=l[1],l[0]
    return l
print(l)
#结果:[2, 1]

发现传入参数为list(可变对象)时,原输入参数会变。

因此原排序函数可改为如下(为了说明上述原因,其实可不用写change函数):

num = str(input('input number:'))
num = num.split()
num =[int(k) for k in num]

def change(l,n):  #输入l为可变对象list
	l[n],l[n+1]=l[n+1],l[n]
	
#冒泡排序
for i in range(len(num)-1):
	for j in range(len(num)-1-i):
		if num[j]>num[j+1]:
			change(num,j)
print(num)

总结
python函数传入参数时,需要根据自己的原意,输入可变或不可变类型的参数。其分类如下:
不可变(immutable):int、字符串(str)、float、(数值型number)、元组(tuple)、None(空)
可变(mutable):字典型(dictionary)、列表型(list), set(集合)

*菜鸡优快云第一篇文章——勇敢迈出第一步 *

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值