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 相关文章推荐
分享vim python缩进等一些配置
Jul 02 Python
Python对象与引用的介绍
Jan 24 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
将Pytorch模型从CPU转换成GPU的实现方法
Aug 19 Python
wxPython:python首选的GUI库实例分享
Oct 05 Python
Python手绘可视化工具cutecharts使用实例
Dec 05 Python
python 日志 logging模块详细解析
Mar 31 Python
jupyter实现重新加载模块
Apr 16 Python
Python pandas如何向excel添加数据
May 22 Python
如何一键升级Python所有包
Nov 05 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 Python
两行代码解决Jupyter Notebook中文不能显示的问题
Apr 24 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写入数据库类代码分享
2011/07/26 PHP
php遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
使用php的HTTP请求的库Requests实现美女图片墙
2015/02/22 PHP
php获取发送给用户的header信息的方法
2015/03/16 PHP
PHP将页面中点击数量高的链接进行高亮显示的方法
2016/05/30 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
Javascript数组的排序 sort()方法和reverse()方法
2012/06/04 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
2016/11/11 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
深入学习JavaScript中的bom
2019/05/27 Javascript
webpack HappyPack实战详解
2019/10/08 Javascript
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
DataFrame中去除指定列为空的行方法
2018/04/08 Python
详解python路径拼接os.path.join()函数的用法
2019/10/09 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
基于python+selenium的二次封装的实现
2020/01/06 Python
Python 解决相对路径问题:"No such file or directory"
2020/06/05 Python
Django静态文件加载失败解决方案
2020/08/26 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
卖车协议书范本4篇
2014/10/01 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
婚宴邀请函
2015/01/30 职场文书
先进个人自荐书
2015/03/06 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
JS class语法糖的深入剖析
2022/07/07 Javascript