python中提供交换两个值的操作:a,b = b,a
其原理如下:
1、让变量a指向“b值的地址”,
2、再让变量b指向“a值的地址”
用这种形式实现输出斐波拉契数列的方法如下:
a,b = 0, 1
while b<100:
print (b),
a, b = b, a+b
其输出将是:1,1,2,3,5,8,13…
注意在数组下标使用值进行交换时,这会引发一些问题:
以下两个语句效果是不同的
nums[i],nums[nums[i]-1] = nums[nums[i]-1],nums[i]
‘’‘
在这句中,先改变了nums[i]的值。
导致nums[nums[i]-1]无法找到正确的位置,因为此时nums[i]发生了变化。
因此无法实现交换的功能
’‘’
nums[nums[i]-1],nums[i] = nums[i],nums[nums[i]-1]
'''
而这一句,首先变化的是nums[nums[i]-1]的值,因此可以正确的完成值的交换。
'''
最重要还是需要理解其中的原理
例如 a=0,b=1
a,b = b, a+b
先将a变成了b的值,再去计算a+b的值,赋值给b(这时的a值还是之前的a,即a=0)
而a=0,b=[1.2.3.4]
a ,b[a] = b[a],a
在计算完a值之后 左边的b[a]会被新的a值取代 即变成了b[b[a]]
会得到a=1 b[1]
总结:等式右边的值不会被更新,是等式运算之前的值
等式左边的值是逐个更新的,先被更新的值会立即生效。