Python連續(xù)賦值需要注意的一些問題
Python連續(xù)賦值的注意事項
在python中是可以使用連續(xù)賦值的方式來一次為多個變量進行賦值的,比如:
a = b = c = 1 a, b, c = 1, 1, 1
這些都可以完成變量的賦值,但是就有一個問題了,比如:
a = 3 a, b = 1, a
如果按照正常的思維邏輯,先進行a = 1,在進行b = a,最后b應該等于1,但是這里b應該等于3,因為在連續(xù)賦值語句中等式右邊其實都是局部變量,而不是真正的變量值本身,比如,上面例子中右邊的a,在python解析的時候,只是把變量a的指向的變量3賦給b,而不是a=1之后a的結(jié)果,這一點剛開始學python的人可能容易誤解,再舉一個Leetcode里鏈表的例子理解就更深了。
假如要對一個鏈表進行翻轉(zhuǎn),就比如把1—>2->3->4轉(zhuǎn)化為4->3->2->1
對于這個問題很簡單,只要反轉(zhuǎn)指針就可以了,假如鏈表結(jié)構(gòu)為:
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是指向一個新建的結(jié)點,因為python沒有指針的概念,所以用一個額外的結(jié)點來代替頭指針,這里的核心代碼就是中間那一行三個變量的連續(xù)賦值,如果單獨一句句來理解的話,最后肯定是想不通的,在這里,假設head結(jié)點是鏈表串'1->2->3->4'的頭結(jié)點,先用新的L結(jié)點的next指針指向head的第一個結(jié)點‘1',之后將L.next(第一次也就是空)賦給了head的next指針,之后再把head的next指針(注意,這里的next指針還是指向‘2'的,而不是空)賦給head,相當于next向前移一位,這一步相當于一個串變成了兩個:
L:‘-inf'->‘1' head:‘2'->‘3'->‘4'->‘5'
Python花樣賦值方法總結(jié)
#連等賦值 a=b=c=1 #拆包賦值 a,b=1,2 #用_占位和*代表不確定個參數(shù)進行拆包賦值 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
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
詳解Python list和numpy array的存儲和讀取方法
這篇文章主要介紹了詳解Python list和numpy array的存儲和讀取方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11python 如何使用find和find_all爬蟲、找文本的實現(xiàn)
這篇文章主要介紹了python 如何使用find和find_all,爬蟲、找文本,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10在Python中實現(xiàn)函數(shù)重載的示例代碼
這篇文章主要介紹了在Python中實現(xiàn)函數(shù)重載的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12Python中的response.text與content區(qū)別詳解
這篇文章主要介紹了Python中的response.text與content區(qū)別詳解,?從網(wǎng)絡請求下來的數(shù)據(jù),他們都是字節(jié)類型的,如果服務器不指定的話,默認編碼是"ISO-8859-1",我們使用text直接拿到的是字符串類型,沒有進行解碼操作,則會出現(xiàn)亂碼問題,需要的朋友可以參考下2023-12-12基于Python實現(xiàn)Word轉(zhuǎn)HTML
將Word轉(zhuǎn)換為HTML能將文檔內(nèi)容發(fā)布在網(wǎng)頁上,這樣,用戶就可以通過瀏覽器直接查看或閱讀文檔而無需安裝特定的軟件,下面我們就來學習一下Python是如何實現(xiàn)Word轉(zhuǎn)HTML的吧2023-12-12