看板 Python 關於我們 聯絡資訊
小弟在自學用python練習寫linked list 還很菜 但身邊沒朋友 所以上來問 先附上我的程式碼 https://i.imgur.com/LedXkL0.jpg 這是leetcode的題目(206-reverse linked list) 因為不熟悉python資料結構的實作方式 所以模仿了一下網路上大神的一個做法 這是一題要反轉linked list的題目 最下方while迴圈就是在做reverse 想問一下 為什麼上方圖片執行後會有如下Error ? https://i.imgur.com/wPC5afA.jpg 而如果把最下面while迴圈內的那一行,改成註解的那一行, 也就是說把while迴圈內的statement 從原本 dummy.next, head, head.next = head, head.next, dummy.next 改成 dummy.next, head.next, head = head, dummy.next, head.next 請問為什麼就能正常執行呢? https://i.imgur.com/TlO4dmh.jpg 這是編譯器發現什麼錯誤呢? 感謝眾大神~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.43.57.36 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1577909487.A.ADD.html 再多問一個很基本,但我卻不知道的事 下面這一個statement a, b, c = 3, 4, 5 想請問編譯器作的順序是由右至左先做a = 3,然後b = 4,再來c = 5? 還是三個是不分順序同時賦值的呢? 似乎是不分順序同時賦值? https://i.imgur.com/1cH8O1O.jpg 如果是不分順序,那麼為什麼原文我說的問題會錯呢QQ? (想了甚久... ※ 編輯: yulin0619 (114.43.57.36 臺灣), 01/02/2020 04:18:57 ※ 編輯: yulin0619 (114.43.57.36 臺灣), 01/02/2020 04:26:29
b04605067: 是順序的問題吧,第一行的話 head 如果先指到最後的nex 01/02 06:07
b04605067: t就變成none了 然後你又call了 head.next 所以它會跟你 01/02 06:07
b04605067: 說none沒有next這個attribute 01/02 06:08
你的留言再加上下方大大的留言,我就豁然開朗了~~
ddavid: 原Po你以為a, b, c = c, a, b會解讀成a = c b = a c = b 01/02 06:27
ddavid: 同時做吧,不過這是錯的 01/02 06:27
ddavid: 真實情況是右邊先做,先把c, a, b的值依序拿出來,然後做 01/02 06:27
ddavid: 成一個Tuple,再把這個Tuple的值一一對應「依序」餵給abc 01/02 06:28
原來python在執行這個statement時,他的操作是這樣做的
ddavid: 因為會先把右邊所有值都拿出來了之後才是賦值,所以不會因 01/02 06:29
ddavid: 為連鎖導致a, b, c通通變成c一開始的值 01/02 06:29
ddavid: 也就是說賦值還是有順序的,因此你原問題一開始那個順序就 01/02 06:30
ddavid: 會最後發生先head = None才打算head.next = xxx而出錯 01/02 06:31
那這樣我清楚明白了 謝謝你們 ※ 編輯: yulin0619 (114.43.57.36 臺灣), 01/02/2020 14:29:38