博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
你真的知道a,b = b,a是怎么实现的吗?(python交换逻辑)
阅读量:3934 次
发布时间:2019-05-23

本文共 1340 字,大约阅读时间需要 4 分钟。

问题:你真的知道python中a,b = b,a是怎么实现的吗?

我们都知道python交换两个数非常简单,直接a,b = b,a就可以实现,并不需要加入中间变量,可是,到底python是怎么做到这一点的呢?接下来就让我们来揭晓答案(见证奇迹~)

       小编今天花了好久(中间还小小的郁闷了一下)终于弄明白python是怎么实现两个数的交换的了。

       什么??你对这个问题不屑一顾?嘿嘿,那就来看看这个问题:
       现在我们有一个数组array = [1,2,3,4,5,6],定义一个变量 x = 0,那么array[ x ]的值是1,array[ array[ x ] ]的值是2
       请问:如果我想把他们俩交换,可以这行代码吗?
                  array[x],array[array[x]] = array[array[x]],array[x]

在这里插入图片描述

有兴趣的小伙伴可以亲手试试哦~
可粘贴代码如下:

array = [1,2,3,4,5,6,7]x = 0array[x],array[array[x]] = array[array[x]],array[x]print(array)

尝试过后的小伙伴有没有觉得很神奇呢?打印的结果是:

[2, 2, 1, 4, 5, 6, 7]
在想了好久之后。终于在参考了 python 底层实现机制之后参悟了

python解释器内部操作:

>>> def test(a,b):...     a,b = b,a...>>> dis.dis(test)  2           0 LOAD_FAST                1 (b)              2 LOAD_FAST                0 (a)              4 ROT_TWO              6 STORE_FAST               0 (a)              8 STORE_FAST               1 (b)             10 LOAD_CONST               0 (None)             12 RETURN_VALUE>>>

解答(交换的底层逻辑)

所谓a , b = b , a 是如何做的呢?

在python中,会在过程中生成一个元组 c,并且c = (b ,a),然后进行a = c[0] , b = c[1] 的操作

PS:不过在实现上,Python 解释器为效率考虑会将中间的临时元祖的创建过程优化掉,而不会真实创建一个元组出来,但这并不影响我们的结果和理解

回到我们一开始的题目,我们生成了一个元组(array[array[x]],array[x]),这个的值为(2,1)

第一步:array[x] = 2
第二步:array[array[x]] = 1      #其中array[x]已经变成了2,所以是对array[3]进行了array[3] = 1操作

总结

所以遇到list中类似的交换操作时候要十分小心哦,不可以贪图方便而错用了python的交换方法。

在这里插入图片描述

嘿嘿,I am very glateful that 你看到这里了哦~下回再见ヾ(o◕∀◕)ノヾ

Thx
在这里插入图片描述

转载地址:http://bnggn.baihongyu.com/

你可能感兴趣的文章
3.11 - Dictionaries in Python
查看>>
3.12 - Tuples in Python
查看>>
4.4 - For Loops
查看>>
4.2.2 - Logical and/or Operators
查看>>
Lesson 4 Part 2 Softmax Regression
查看>>
文章中运用到的数学公式
查看>>
Projective Dynamics: Fusing Constraint Projections for Fast Simulation
查看>>
从2D恢复出3D的数据
查看>>
glm 中 数据类型 与 原始数据(c++ 数组)之间的转换
查看>>
Derivatives of scalars, vector functions and matrices
查看>>
the jacobian matrix and the gradient matrix
查看>>
VS2010 将背景设为保护色
查看>>
ubutun里面用命令行安装软件
查看>>
ubuntu 常用命令
查看>>
SQLite Tutorial 4 : How to export SQLite file into CSV or Excel file
查看>>
how to move pivot to origin
查看>>
Optimizate objective function in matrix
查看>>
Convert polygon faces to triangles or quadrangles
查看>>
How do I divide matrix elements by column sums in MATLAB?
查看>>
read obj in matlab
查看>>