引入:
实现链表翻转
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
cur = head
prev = None
while cur:
cur.next,prev,cur = prev,cur,cur.next
return prev
初入Python时,常按着C++的思维去想,然后被如下赋值给搞懵逼了。
cur.next,prev,cur = prev,cur,cur.next
那为什么这样赋值能产生我们需要的效果?我们来简单了解下Python的变量赋值
变量赋值
###赋值运算符 Python 语言中, 等号(=)是主要的赋值运算符。
anInt = 11
aString = ‘leacoder’
aFloat = -3.1415
aList = [“a”, “b”, “c”, “d”];
当然还有其他基本数据类型 可以参见 Python3 基本数据类型
注意,赋值并不是直接将一个值赋给一个变量,尽管可能根据其它语言编程经验认为应
该如此(比如我T_T)。在 Python 语言中,对象是通过引用传递的。在赋值时,不管这个对象是新创建的,还是一个已经存在的,都是将该对象的引用(并不是值)赋值给变量。
多重赋值
x=y=z=0
一个值为 0 的整数对象被创建,该对象的同一个引用被赋值给 x、y 和z 。也就是将一个对象赋给了多个变量。当然,在 Python 当中,将多个对象赋给多个变量也是可以的。
###“多元”赋值 另一种将多个变量同时赋值的方法我们称为多元赋值(multuple)。将 “mul-tuple”连在一起自造的。因为采用这种方式赋值时, 等号两边的对象都是元组。
x, y, z = 1, 2, 'a string'
等同于 (x, y, z) = (1, 2, 'a string')
两个整数对象(值分别为 1 和 2)及一个字符串对象, 被分别赋值给x, y 和 z。通常元组需要用圆括号(小括号)括起来,尽管它们是可选的。但是加上圆括号以使得代码有更高的可读性,当然误解也就更少了。
在其他语言中(如C++),要交换两个值, 会想到使用一个临时变量比如 tmp 来临时保存其中一个值:
tmp = x;
x = y;
y = tmp;
在上面的 代码片段中,变量 x 和变量 y 的值被互相交换.临时变量 tmp 用于在将 y 赋值给 x 前先保存 x 的值。将 y 的值赋给 x 之后, 才可以将保存在 tmp 变量中的 x 的值赋给 y。
Python 的多元赋值方式可以实现无需中间变量交换两个变量的值。
x, y = 123, 'a string'
print(x,y)
x, y = y, x
print(x,y)
输出:
Python 在赋值之前已经事先对 x 和 y 的新值做了计算。
列表和元组
可以将列表和元组当成普通的“数组”,它能保存任意数量任意类型的 Python 对象。和数组一样,通过从 0 开始的数字索引访问元素,但是列表和元组可以存储不同类型的对象。
列表和元组有几处重要的区别:
列表:元素用中括号( [ ])包裹,元素的个数及元素的值可以改变
元组:元素用小括号(( ))包裹,不可以更改(尽管他们的内容可以)。元组可以看成是只读的列表。
GitHub链接: https://github.com/lichangke/LeetCode
个人Blog: https://lichangke.github.io/
欢迎大家来一起交流学习