python 两数交换新写法原理

今天学python,突然发现没有swap函数,那怎么交换两个数呢,难道手写交换,那效率太差了

我们看一下实例

a = 1
b = 2

a,b = b,a

print(a,b)

其实很简单的原理,然而我却琢磨了半天,可能陷入了过程化编程的思维里,一直纠结a和b到底谁先赋值,怎么交换了,想了半天百度一下,瞬间清晰了

个人想法:

变量只是存储一个值,我们用用新变量指向另一个变量时,其实指向的是另一个变量存储的值

那么这里就可以这么理解了,a,b = b,a 其实变相的给前面 a,b  两个变量他们的指向的值

那么  a = b   b = a 为何又不行呢

因为 前面   a = b  时,变量  a  已经指向了b 的值,而后面  b = a  则把a指向的值又传给了b

导致 a = b

其实 a,b  =  b,a  的运行步骤应该是

1、在内存中找到b的值,a的值   例如:b = 1  a = 2

2、重新赋值 a,b = 1,2

原文地址:https://www.cnblogs.com/cheneyboon/p/11613857.html

时间: 2024-08-02 17:52:16

python 两数交换新写法原理的相关文章

实现两数交换的几种方法

#实现两数交换的几种方法: - - 1.常见的方法(采用临时变量) int x=10; int y=20; int temp=x;//定义临时变量 x=y; y=temp; - 2.异或的方法 int x=10; int y=20; x=x^y; y=x^y;//y=x^y^y=x;即y=10; x=x^y;//x=x^y^x=y;即x=20; ``` - 3.自加的方法 int x=10; int y=20; x=x+y;//x=30; y=x-y;//y=30-20=10; x=x-y;//

C语言与汇编的嵌入式编程:汇编调用函数(两数交换)

编写一个两数交换函数swap,具体代码如下: #include<stdio.h> void swap(int *a,int *b) { int temp; temp = *a; *a = *b; *b= temp; //printf("a=%d,b=%d,temp=%d\n",a,b,temp); } void main(){ int a=0; int b=0; char *str1="a=%d,b=%d\n"; printf("++++++\

异或运算实现两数交换

1.异或定义 1 ⊕ 1 = 0 0 ⊕ 0 = 0 1 ⊕ 0 = 1 0 ⊕ 1 = 1 简单说就是,相同为0,不同为1. 2.C++实现方法 1 #include <iostream> 2 3 int main() 4 { 5 int a, b; 6 std::cout << "请输入要交换的两个数:"; 7 std::cin >> a >> b; 8 std::cout << "交换前:\na="

leetcode python两数之和返回索引

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] class Solution: def twoSum(self, nums, target): dic = {} for i in range(len(nums)): if target - nums[

指针实现两数交换和指向函数的指针

指针就是地址,而指针变量就是存储地址的变量. 1.指针与函数 利用指针解决: C语言中函数的参数采用"单向传递",故第一个程序中改变形参不会改变实参,而在第二个程序中,使用指针变量作为参数,改变指针变量所指向的值,函数调用结束后,变量值被保留下来. 2.指向函数的指针的应用

宏定义实现两数交换

#include<stdio.h> #define SWAP(VALUE1,VALUE2) do{ VALUE1 += VALUE2; VALUE2 = VALUE1 - VALUE2; VALUE1 = VALUE1 - VALUE2;}while(0) int main() { double a,b; a = 2; b = 1; printf("a = %lf,b = %lf\n",a,b); SWAP(a,b); printf("a = %lf,b = %l

两数交换

1 利用第三个变量 $temp = $a; $a = $b; $b = $temp; 2.list — 把数组中的值赋给一些变量: list($a, $b) = array($b, $a); 3.array_reverse — 返回一个单元顺序相反的数组 $arr=array($a,$b); $arr=array_reverse($arr); $a=$arr[0]; $b=$arr[1]; 4.直接使用数组操作: $a = "aaa"; $b = "bbb"; $b

异或交换两数

从左神算法视频里get到一个小技巧: 通过异或运算来交换两数 看上去瞬间逼格高了不少 int a=11; int b=12; int temp=a^b; a=temp^a; b=temp^b 其实原理很简单, 先科普(小白请看)一下异或运算 两个二进制数异或运算 同位上相同时为0 不同时为1; (同或运算则相反,相同为1,不同为0) 所以上面 a=temp^a=a^a^b=0^b; 0异或任何数=异或的那个数本身; 所以我们就完成了两个数的交换; 原文地址:https://www.cnblogs

LeetCode算法题——两数之和(python)

两数之和: 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数.你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用.例如:给定 nums = [2, 7, 11, 15], target = 9.由nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1] 原文地址:http://blog.51cto.com/13921683/2318829