[問題] 多重變數Multiple Assignment Statement

作者: icbruce (justlikethis)   2016-09-28 09:47:08
最近在用python 練leetcode
其中一題是做reverseList
參考討論區 答案如下:
Q:Reverse a singly linked list.
def reverseList(self, head):
rev = None
while head:
head.next,rev,head = rev,head,head.next
return rev
第四行,如果改成如下就會 Error 'NoneType' object has no attribute 'next'
head,rev,head.next = head.next,head,rev
請問multiple assignment 有順序嗎?自己認為他是把右方先都存在暫時變數,
再存到左邊,如果是這樣順序怎麼變都應該沒關係. 但顯然不是.
另外請問前輩你們推薦這種寫法嗎?還是說分開一行一行的比較好
先謝謝回答
作者: icbruce (justlikethis)   2016-09-28 09:58:00
明白了,右邊沒有順序,但左邊會先處理第一個再接下去所以head.next 要先取代,再來才是head. 反之則會error
作者: Typebrook (Pham)   2016-09-28 12:54:00
長知識了,不過為什麼不用slice?(list[::-1])
作者: eight0 (欸XD)   2016-09-29 06:08:00
那如果在右邊加括弧呢?感覺會先建成一個 tuple 再拆開
作者: icbruce (justlikethis)   2016-09-29 19:18:00
回Type: head是ListNode 不是list, 但我也沒發現還有這招
作者: Typebrook (Pham)   2016-09-30 12:56:00
謝謝指教,我還是coding新手沒有linked list的概念,補充了一下背景知識,的確應該和__getitem__沒什麼關聯
作者: icbruce (justlikethis)   2016-09-30 21:42:00
回eight, 加括弧和不加是一樣的結果,我猜他都會先建tuple 再分配的.

Links booklink

Contact Us: admin [ a t ] ucptt.com