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编程实现删除VC临时文件及Debug目录的方法
Mar 22 Python
scrapy爬虫实例分享
Dec 28 Python
python微信跳一跳系列之棋子定位像素遍历
Feb 26 Python
通过Python模块filecmp 对文件比较的实现方法
Jun 29 Python
Python多线程编程之多线程加锁操作示例
Sep 06 Python
python bmp转换为jpg 并删除原图的方法
Oct 25 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
Dec 05 Python
Python中的支持向量机SVM的使用(附实例代码)
Jun 26 Python
解决python 上传图片限制格式问题
Oct 30 Python
Python While循环语句实例演示及原理解析
Jan 03 Python
python 如何设置守护进程
Oct 29 Python
python编写扎金花小程序的实例代码
Feb 23 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
PHP利用str_replace防注入的方法
2013/11/10 PHP
php用户注册时常用的检验函数实例总结
2014/12/22 PHP
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
浅谈Vue下使用百度地图的简易方法
2018/03/23 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
vue-router的两种模式的区别
2019/05/30 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
python对json的相关操作实例详解
2017/01/04 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
Python运行提示缺少模块问题解决方案
2020/04/02 Python
python链表类中获取元素实例方法
2021/02/23 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
某公司C#程序员面试题笔试题
2014/05/26 面试题
轻化专业学生实习自我鉴定
2013/09/20 职场文书
销售自我评价
2013/10/22 职场文书
银行求职自荐书
2014/06/25 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
2014年度个人工作总结
2014/11/07 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
小学运动会开幕词
2015/01/28 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书