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实现xlsx文件分析详解
Jan 02 Python
Python中max函数用于二维列表的实例
Apr 03 Python
解决python升级引起的pip执行错误的问题
Jun 12 Python
详解用Python练习画个美队盾牌
Mar 23 Python
Python Django简单实现session登录注销过程详解
Aug 06 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
常用的10个Python实用小技巧
Aug 10 Python
Python:__eq__和__str__函数的使用示例
Sep 26 Python
Python使用windows设置定时执行脚本
Nov 12 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
Feb 06 Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 24 Python
python实现简单聊天功能
Jul 07 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 ? EasyUI DataGrid 资料取的方式介绍
2012/11/07 PHP
PHP的拦截器实例分析
2014/11/03 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
2015/04/07 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
Laravel框架表单验证操作实例分析
2019/09/30 PHP
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
JavaScript类和继承 prototype属性
2010/09/03 Javascript
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
解决extjs grid 不随窗口大小自适应的改变问题
2014/01/26 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
AngularJS基础学习笔记之表达式
2015/05/10 Javascript
NodeJS中的MongoDB快速入门详细教程
2016/11/11 NodeJs
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
脚手架vue-cli工程webpack的作用和特点
2018/09/29 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
Node.js API详解之 vm模块用法实例分析
2020/05/27 Javascript
VUE动态生成word的实现
2020/07/26 Javascript
python基础教程之缩进介绍
2014/08/29 Python
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
KMP算法精解及其Python版的代码示例
2016/06/01 Python
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
如何使用python代码操作git代码
2020/02/29 Python
Python3 assert断言实现原理解析
2020/03/02 Python
Django日志及中间件模块应用案例
2020/09/10 Python
Python爬虫抓取论坛关键字过程解析
2020/10/19 Python
教你使用Canvas处理图片的方法
2017/11/28 HTML / CSS
美国最大的无人机经销商:DroneNerds
2018/03/20 全球购物
瑞典多品牌连锁店:Johnells
2021/01/13 全球购物
十佳班主任事迹材料
2014/01/18 职场文书
十八大演讲稿
2014/05/22 职场文书
工作证明格式及范本
2014/09/12 职场文书
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL