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的dict,set,list,tuple应用详解
Jul 24 Python
RC4文件加密的python实现方法
Jun 30 Python
python学习之面向对象【入门初级篇】
Jan 21 Python
python使用sqlite3时游标使用方法
Mar 13 Python
python opencv设置摄像头分辨率以及各个参数的方法
Apr 02 Python
python批量读取txt文件为DataFrame的方法
Apr 03 Python
Django代码性能优化与Pycharm Profile使用详解
Aug 26 Python
Python爬取商家联系电话以及各种数据的方法
Nov 10 Python
Python3.5多进程原理与用法实例分析
Apr 05 Python
Python定义函数功能与用法实例详解
Apr 08 Python
python使用itchat模块给心爱的人每天发天气预报
Nov 25 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
Apr 29 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
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
2013/06/18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
PHP+Ajax简单get验证操作示例
2019/03/02 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
javascript代码加载优化方法
2011/01/30 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
2013/07/17 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
使用递归遍历对象获得value值的实现方法
2016/06/14 Javascript
JS前端加密算法示例
2016/12/22 Javascript
Vue 路由 过渡动效 数据获取方法
2018/07/31 Javascript
[36:02]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第一局
2016/02/28 DOTA
[01:09:20]NB vs NAVI Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
Python中使用摄像头实现简单的延时摄影技术
2015/03/27 Python
详解Django框架中的视图级缓存
2015/07/23 Python
Python网络编程中urllib2模块的用法总结
2016/07/12 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
python中logging包的使用总结
2018/02/28 Python
pip命令无法使用的解决方法
2018/06/12 Python
详解Python:面向对象编程
2019/04/10 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
Python实现ATM系统
2020/02/17 Python
python多项式拟合之np.polyfit 和 np.polyld详解
2020/02/18 Python
python判断是空的实例分享
2020/07/06 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
墨西哥网上超市:Superama
2018/07/10 全球购物
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
2016教师节感恩话语
2015/12/09 职场文书
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python