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 相关文章推荐
Using Django with GAE Python 后台抓取多个网站的页面全文
Feb 17 Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
Python干货:分享Python绘制六种可视化图表
Aug 27 Python
tensorflow实现加载mnist数据集
Sep 08 Python
python实现简单加密解密机制
Mar 19 Python
Python使用sklearn实现的各种回归算法示例
Jul 04 Python
简单了解Python3里的一些新特性
Jul 13 Python
Python pandas RFM模型应用实例详解
Nov 20 Python
Python进程的通信Queue、Pipe实例分析
Mar 30 Python
Keras中的多分类损失函数用法categorical_crossentropy
Jun 11 Python
PyTorch中Tensor的数据类型和运算的使用
Sep 03 Python
python异步的ASGI与Fast Api实现
Jul 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
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
php采集中国代理服务器网的方法
2015/06/16 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
[原创]php实现子字符串位置相互对调互换的方法
2016/06/02 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
详解json在php中的应用
2018/09/30 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
自己开发Dojo的建议框架
2008/09/24 Javascript
用户注册常用javascript代码
2009/08/29 Javascript
JavaScript控制各种浏览器全屏模式的方法、属性和事件介绍
2014/04/03 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
JavaScript职责链模式概述
2016/09/17 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
详解Vue依赖收集引发的问题
2019/04/22 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
[00:47]DOTA2荣耀之路6:天火,天火!
2018/05/30 DOTA
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
Python导入模块时遇到的错误分析
2017/08/30 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
用Python配平化学方程式的方法
2019/07/20 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
2018/09/10 HTML / CSS
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
英国最大最好的无人机商店:Drones Direct
2019/07/12 全球购物
介绍信的写法
2015/01/31 职场文书
幼儿园三八妇女节活动总结
2015/02/06 职场文书
2016春节放假通知范文
2015/08/18 职场文书
python实现简单的三子棋游戏
2022/04/28 Python