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 相关文章推荐
rabbitmq(中间消息代理)在python中的使用详解
Dec 14 Python
python实现扫描日志关键字的示例
Apr 28 Python
python实现括号匹配的思路详解
Aug 23 Python
详解django的serializer序列化model几种方法
Oct 16 Python
python3的输入方式及多组输入方法
Oct 17 Python
python 利用for循环 保存多个图像或者文件的实例
Nov 09 Python
Win10环境python3.7安装dlib模块趟过的坑
Aug 01 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
Feb 10 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
Feb 26 Python
详解Scrapy Redis入门实战
Nov 18 Python
Python实战之疫苗研发情况可视化
May 18 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
Jun 13 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遍历并打印指定目录下所有文件实例
2014/02/10 PHP
PHP回溯法解决0-1背包问题实例分析
2015/03/23 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
jQuery事件绑定与解除绑定实现方法
2015/04/15 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
原生JS实现萤火虫效果
2020/03/07 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
js实现盒子滚动动画效果
2020/08/09 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python3读取文件常用方法实例分析
2015/05/22 Python
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
python计算日期之间的放假日期
2018/06/05 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
HTML5 绘制图像(上)之:关于canvas元素引领下一代web页面的问题
2013/04/24 HTML / CSS
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
请写出char *p与"零值"比较的if语句
2014/09/24 面试题
软件测试英文面试题
2012/10/14 面试题
高中军训感言500字
2014/02/24 职场文书
财务负责人任命书
2014/06/06 职场文书
个人四风问题整改措施思想汇报
2014/10/04 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
MySQL锁机制
2021/04/05 MySQL
python实战之用emoji表情生成文字
2021/05/08 Python