Python连续赋值需要注意的一些问题


Posted in Python onJune 03, 2021

Python连续赋值的注意事项

在python中是可以使用连续赋值的方式来一次为多个变量进行赋值的,比如:

a = b = c = 1
a, b, c = 1, 1, 1

这些都可以完成变量的赋值,但是就有一个问题了,比如:

a = 3
a, b = 1, a

如果按照正常的思维逻辑,先进行a = 1,在进行b = a,最后b应该等于1,但是这里b应该等于3,因为在连续赋值语句中等式右边其实都是局部变量,而不是真正的变量值本身,比如,上面例子中右边的a,在python解析的时候,只是把变量a的指向的变量3赋给b,而不是a=1之后a的结果,这一点刚开始学python的人可能容易误解,再举一个Leetcode里链表的例子理解就更深了。

假如要对一个链表进行翻转,就比如把1—>2->3->4转化为4->3->2->1

对于这个问题很简单,只要反转指针就可以了,假如链表结构为:

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

我们可以用很简单的三行代码完成这个过程:

def reverseList(self, head):
        L = ListNode(float("-inf"))
        while head:
            L.next, head.next, head = head, L.next, head.next
        return L.next

这里的L是指向一个新建的结点,因为python没有指针的概念,所以用一个额外的结点来代替头指针,这里的核心代码就是中间那一行三个变量的连续赋值,如果单独一句句来理解的话,最后肯定是想不通的,在这里,假设head结点是链表串'1->2->3->4'的头结点,先用新的L结点的next指针指向head的第一个结点‘1',之后将L.next(第一次也就是空)赋给了head的next指针,之后再把head的next指针(注意,这里的next指针还是指向‘2'的,而不是空)赋给head,相当于next向前移一位,这一步相当于一个串变成了两个:

L:‘-inf'->‘1'
head:‘2'->‘3'->‘4'->‘5'

Python花样赋值方法总结

 

#连等赋值
a=b=c=1
#拆包赋值
a,b=1,2
#用_占位和*代表不确定个参数进行拆包赋值
a=range(10)
_,b,c,*d=a
#迭代赋值
a=(1,2)
b=[(i,j)for i in a for j in a]
#交换
a,b=b,a

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用defaultdict读取文件各列的方法
May 11 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
Oct 21 Python
Python一句代码实现找出所有水仙花数的方法
Nov 13 Python
win8.1安装Python 2.7版环境图文详解
Jul 01 Python
在Python中使用MongoEngine操作数据库教程实例
Dec 03 Python
Python函数的定义方式与函数参数问题实例分析
Dec 26 Python
pytorch常见的Tensor类型详解
Jan 15 Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 Python
将tf.batch_matmul替换成tf.matmul的实现
Jun 18 Python
Python confluent kafka客户端配置kerberos认证流程详解
Oct 12 Python
python中watchdog文件监控与检测上传功能
Oct 30 Python
手残删除python之后的补救方法
Jun 26 Python
pytorch fine-tune 预训练的模型操作
Jun 03 #Python
Python实现byte转integer
Jun 03 #Python
Python数据分析之绘图和可视化详解
Python数据分析之pandas读取数据
Jun 02 #Python
Python 如何实现文件自动去重
python状态机transitions库详解
Jun 02 #Python
python爬取某网站原图作为壁纸
You might like
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
使用Xdebug调试和优化PHP程序之[1]
2007/04/17 PHP
php cookie的操作实现代码(登录)
2010/12/29 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
PHP使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
PHP7 新增常量
2021/03/09 PHP
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
2007/04/20 Javascript
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
JavaScript Chart 插件整理
2010/06/18 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
2016/06/08 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
2016/08/10 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
2016/10/26 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
javascript实现抢购倒计时程序
2019/08/26 Javascript
layui原生表单验证的实例
2019/09/09 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
[01:17:12]职来职往完美电竞专场
2014/09/18 DOTA
Python类的多重继承问题深入分析
2014/11/09 Python
Python2随机数列生成器简单实例
2017/09/04 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
anaconda中更改python版本的方法步骤
2019/07/14 Python
Django model 中设置联合约束和联合索引的方法
2019/08/06 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
三个python爬虫项目实例代码
2019/12/28 Python
keras中的卷积层&池化层的用法
2020/05/22 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
next在python中返回迭代器的实例方法
2020/12/15 Python
一套PHP的笔试题
2013/05/31 面试题
python获取带有返回值的多线程
2022/05/02 Python