Python用for循环的时候无法利用临时变量修改列表中的值问题

标题中已经提到,我利用python的for循环的时候如果直接进行赋值,list里的值并不会改变,例如下面代码段1就是经典错误示范:

代码段1(错误示范):做一个给列表的值(字符串格式)添加"The Great "前缀的函数

def make_great(ass):

        b=[] #空列表方便把改后的临时变量append进去·

        for a in ass:

                a="The Great" + a

                b.append(a)

        ass=b #错误方法,实际的ass存储的仍然是执行这个函数前的内容,因为函数结束后这个赋值就会被系统缓存释放掉

magicers=["liuQian","Dr.D","Kasonbalonga"]

make_great(magicers)

print(magicers)

看起来好像天衣无缝,应该可以得到正确结果,但是在定义函数时最后一句ass=b并不会把b列表内容直接写入实际参数的存储中,因为这一次赋值也跟循环中的赋值类似只是一次临时调用,函数执行结束后,缓存一释放ass还是之前的ass,并不会改变原本已有的物理块存储中的文件系统内容

那再说一下怎么能在for循环中真的改变列表的值吧,我提供两种方法:

方法一:利用return把想要的新列表传出来赋值给其他变量

此方法只需要改掉错误代码段1中,定义函数的最后一句,即:

把ass=b改为return b

这样后续调用的时候,可以这样调用

magicers=["liuQian","Dr.D","Kasonbalonga"]

b=make_great(magicers[:])

print(magicers)

print(b)

得到的结果是:

方法二:利用index索引方法改掉列表值

def make_great(ass):

        n=len(ass)

        for i in range(n):

                ass[i]="The Great "+ ass[i]

magicers=["liuQian","Dr.D","Kasonbalonga"]

b=magicers[:]

make_great(b)

print(b)

得到结果是:

利用索引可以直接指向列表的物理地址,修改物理地址对应的文件系统内容

总结:两种方法都可以,都是还不错的方法,但是用index索引方法高效一点点,不过也就一点点,具体看个人习惯

 

 

          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值