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重新引入被覆盖的自带function
Jul 16 Python
使用Python编写一个模仿CPU工作的程序
Apr 16 Python
python解决网站的反爬虫策略总结
Oct 26 Python
Python编程中NotImplementedError的使用方法
Apr 21 Python
python框架中flask知识点总结
Aug 17 Python
在Python中通过getattr获取对象引用的方法
Jan 21 Python
python中的decimal类型转换实例详解
Jun 26 Python
18个Python脚本可加速你的编码速度(提示和技巧)
Oct 17 Python
Python中pyecharts安装及安装失败的解决方法
Feb 18 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
Feb 23 Python
Python学习之路之pycharm的第一个项目搭建过程
Jun 18 Python
python turtle绘图命令及案例
Nov 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并发访问实例代码
2012/09/06 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
2012/10/06 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
PHP多进程编程实例详解
2017/07/19 PHP
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
原生js 秒表实现代码
2012/07/24 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
Javascript中克隆一个数组的实现代码
2013/12/06 Javascript
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
JavaScript通过HTML的class来获取HTML元素的方法总结
2016/05/24 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
JS中的作用域链
2017/03/01 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
tsconfig.json配置详解
2019/05/17 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
如何利用JS将手机号中间四位变成*号
2020/09/29 Javascript
Python脚本实现代码行数统计代码分享
2015/03/10 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
Python Web编程之WSGI协议简介
2018/07/18 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
Python 使用 environs 库定义环境变量的方法
2020/02/25 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
Python判断字符串是否为合法标示符操作
2020/09/03 Python
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
什么是命名空间(NameSpace)
2015/11/24 面试题
数控专业毕业生求职信范文
2013/09/21 职场文书
中国梦演讲稿教师篇
2014/04/23 职场文书
村干部培训方案
2014/05/02 职场文书
生产助理岗位职责
2014/06/18 职场文书
师范生见习报告范文
2014/11/03 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
酒店仓管员岗位职责
2015/04/01 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书