python学习:解决如何在函数内处理数据而不影响原列表

python学习:解决如何在函数内处理数据而不影响原列表

关于一个如何在函数内修改三阶矩阵。
在python里,如果想要定义一个函数,把列表当c++里的形参传进去,显然是不可能的。在python里,只存在引用传递和值传递,当传进去的是一个值的时候,就是值传递,当传进去是一个列表或者是字典的时候,就是引用传递。
引用传递到函数内操作的话,在函数外的列表或者是字典也会随之改变。看来python也有不方便的地方啊!那如果我们想要处理一个矩阵或者是列表的话怎么办呢?
经过多次试验,终于找到了一种方法。在python中,字典类型的值是不可改变的,而列表是可以改变的。而他们之间的转换就是list()和tuple()。那么我们只需要在函数外的时候是字典类型,传进去后再把这个字典类型变量给一个新的字典类型变量,同时转换成一个列表类型,那么就可以任意的修改这个列表,而不影响原来的字典类型数据了!
下面是一个关于如何在函数内修改三阶矩阵的程序:

juzhen=((1,2,3),(4,5,6),(7,8,9))
def delju(juzhen):    
	print(juzhen)    
	a=list((juzhen))    
	for i in range(len(a)):        
		a[i]=list(a[i])    
	print(a)    
	for i in range(len(a)):        
		del a[i][0]        
	print(a)
delju(juzhen)
print(juzhen)

结果:

((1, 2, 3), (4, 5, 6), (7, 8, 9))
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[[2, 3], [5, 6], [8, 9]]
((1, 2, 3), (4, 5, 6), (7, 8, 9))
>>> 

才从上面的结果就可以看出,当我们传进去的时候,是一个二维的字典,然后在内部改变成一个二维的列表,然后对列表操作,最后不会对字典类型的变量有任何影响!
那可不可以在字典类型里的每一个值都是列表,然后传到函数内修改列表内的值呢?答案是不可以的。因为在字典内还是列表的形式存在的值,修改后还是会对函数外的字典类型内的列表产生影响。
如下程序:

juzhen=([1,2,3],[4,5,6],[7,8,9])
def delju(juzhen):    
	print(juzhen)    
	a=list((juzhen))    
	print(a)  	
	for i in range(len(a)):       
  		del a[i][0]        
	print(a)	
delju(juzhen)
print(juzhen)

结果:

([1, 2, 3], [4, 5, 6], [7, 8, 9])
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
[[2, 3], [5, 6], [8, 9]]
([2, 3], [5, 6], [8, 9])
>>> 

从结果看出,在函数内部修改后,函数外部的字典内的列表也被同时修改了。
这样就说明了如何利用字典来解决函数内处理列表的问题。
 方法二:
        当然,还有一种比较简单的方法,我们可以直接先引入numpy:import numpy as np,然后利用numpy内的函数直接处理矩阵。也是推荐操作。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

留在街角

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值