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中map,reduce,filter和sorted函数的使用方法
Aug 17 Python
PyCharm设置SSH远程调试的方法
Jul 17 Python
Ubuntu下Anaconda和Pycharm配置方法详解
Jun 14 Python
python中PS 图像调整算法原理之亮度调整
Jun 28 Python
pycharm 安装JPype的教程
Aug 08 Python
python 魔法函数实例及解析
Sep 25 Python
使用python切片实现二维数组复制示例
Nov 26 Python
django实现模板中的字符串文字和自动转义
Mar 31 Python
python如何安装下载后的模块
Jul 03 Python
关于python中remove的一些坑小结
Jan 04 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
Jan 24 Python
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
Oct 16 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
在字符串中把网址改成超级链接
2006/10/09 PHP
php 文件上传类代码
2011/08/06 PHP
PHP查询网站的PR值
2013/10/30 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
PHP中使用curl伪造IP的简单方法
2015/08/07 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
2015/09/30 PHP
php自定义函数实现统计中文字符串长度的方法小结
2017/04/15 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
jquery实现多屏多图焦点图切换特效的方法
2015/05/04 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
2016/03/28 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
2016/05/12 Javascript
AngularJS基础 ng-mouseleave 指令详解
2016/08/02 Javascript
JavaScript“尽快失败”的原则实例详解
2016/10/08 Javascript
canvas轨迹回放功能实现
2017/12/20 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
python3安装pip3(install pip3 for python 3.x)
2018/04/03 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
描述RIP和OSPF区别以及特点
2015/01/17 面试题
2014全国两会心得体会
2014/03/17 职场文书
篮球比赛口号
2014/06/10 职场文书
不同意离婚答辩状
2015/05/22 职场文书
校长新学期致辞
2015/07/30 职场文书