[問題] 關於linked list

看板Python作者 (愛在雨過天晴時)時間5年前 (2020/01/02 04:11), 5年前編輯推噓2(209)
留言11則, 2人參與, 5年前最新討論串1/1
小弟在自學用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

01/02 06:07, 5年前 , 1F
是順序的問題吧,第一行的話 head 如果先指到最後的nex
01/02 06:07, 1F

01/02 06:07, 5年前 , 2F
t就變成none了 然後你又call了 head.next 所以它會跟你
01/02 06:07, 2F

01/02 06:08, 5年前 , 3F
說none沒有next這個attribute
01/02 06:08, 3F
你的留言再加上下方大大的留言,我就豁然開朗了~~

01/02 06:27, 5年前 , 4F
原Po你以為a, b, c = c, a, b會解讀成a = c b = a c = b
01/02 06:27, 4F

01/02 06:27, 5年前 , 5F
同時做吧,不過這是錯的
01/02 06:27, 5F

01/02 06:27, 5年前 , 6F
真實情況是右邊先做,先把c, a, b的值依序拿出來,然後做
01/02 06:27, 6F

01/02 06:28, 5年前 , 7F
成一個Tuple,再把這個Tuple的值一一對應「依序」餵給abc
01/02 06:28, 7F
原來python在執行這個statement時,他的操作是這樣做的

01/02 06:29, 5年前 , 8F
因為會先把右邊所有值都拿出來了之後才是賦值,所以不會因
01/02 06:29, 8F

01/02 06:29, 5年前 , 9F
為連鎖導致a, b, c通通變成c一開始的值
01/02 06:29, 9F

01/02 06:30, 5年前 , 10F
也就是說賦值還是有順序的,因此你原問題一開始那個順序就
01/02 06:30, 10F

01/02 06:31, 5年前 , 11F
會最後發生先head = None才打算head.next = xxx而出錯
01/02 06:31, 11F
那這樣我清楚明白了 謝謝你們 ※ 編輯: yulin0619 (114.43.57.36 臺灣), 01/02/2020 14:29:38
文章代碼(AID): #1U3FplhT (Python)
文章代碼(AID): #1U3FplhT (Python)