最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 多變量賦值問題小結

 更新時間:2025年11月06日 15:10:49   作者:Voyager_4  
本文給大家介紹Python 多變量賦值問題,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧

今天在刷鏈表反轉題的時候,遇到了兩段看起來幾乎一樣的代碼,結果一個能正確反轉鏈表,一個卻不行。仔細研究后發(fā)現(xiàn),問題出在 Python 的多變量賦值順序上 —— 這個平時沒太在意的細節(jié),在操作鏈表指針時居然能造成這么大的影響。記錄一下我的分析過程,免得以后再踩類似的坑。

問題背景:兩段 “相似” 的反轉代碼

先看這兩段代碼,都是用迭代法反轉單鏈表:

代碼 1(能正確反轉):

def reverseList(head):
    last = None
    while head:
        # 關鍵賦值行
        last, head.next, head = head, last, head.next
    return last

代碼 2(無法正確反轉):

def reverseList(head):
    last = None
    while head:
        # 關鍵賦值行(順序不同)
        head, head.next, last = head.next, last, head
    return last

第一眼看上去,只是左側變量的賦值順序變了,右側的值好像還是那幾個。但實際運行時,代碼 1 能得到正確的反轉鏈表,代碼 2 卻會返回錯誤結果(比如鏈表斷裂、部分節(jié)點丟失)。這到底是為什么?

核心原因:Python 多變量賦值的 “秘密”

在 Python 里,多變量賦值的執(zhí)行邏輯是 “先計算右側所有表達式的值,再一次性賦值給左側變量”。也就是說,右側的值都是基于賦值前的原始狀態(tài)計算的,不會被左側的中間賦值影響。

但這一點,需要注意的是 “=”右側是獲取值,所以可以理解為完全并行執(zhí)行的。但是左側是改變值,這就意味著是會順序影響

逐行分析:兩段代碼的執(zhí)行差異

我們用一個簡單的鏈表1->2->3來模擬執(zhí)行過程,看看兩段代碼的區(qū)別。

代碼 1 的執(zhí)行邏輯(正確)

關鍵賦值行:last, head.next, head = head, last, head.next

拆解步驟(每次循環(huán)):

  1. 先算右側值(基于當前原始狀態(tài)):
  • 第一個值:head(當前節(jié)點,比如第一輪是 1)
  • 第二個值:last(上一個節(jié)點,初始是 None)
  • 第三個值:head.next(下一個節(jié)點,第一輪是 2)
  1. 再給左側賦值
  • last = 第一個值(當前節(jié)點 1)→ 現(xiàn)在 last 指向 1
  • head.next = 第二個值(原 last,即 None)→ 節(jié)點 1 的 next 指向 None(完成反轉第一步)
  • head = 第三個值(下一個節(jié)點 2)→ 移動 head 到下一個節(jié)點,繼續(xù)循環(huán)

整個過程中,“反轉當前節(jié)點指針” 和 “移動 head 到下一個節(jié)點” 是基于原始值操作的,互不干擾。比如不會因為 head 移動了,導致當前節(jié)點的指針沒反轉。

代碼 2 的執(zhí)行邏輯(錯誤)

關鍵賦值行:head, head.next, last = head.next, last, head

同樣用1->2->3模擬:

  1. 先算右側值(基于當前原始狀態(tài)):
  • 第一個值:head.next(下一個節(jié)點 2)
  • 第二個值:last(初始 None)
  • 第三個值:head(當前節(jié)點 1)
  1. 再給左側賦值
  • head = 第一個值(下一個節(jié)點 2)→ 此時 head 已經指向 2 了
  • head.next = 第二個值(原 last,即 None)→ 注意!這里的 head 已經是 2 了,所以實際是把節(jié)點 2 的 next 改成了 None
  • last = 第三個值(原 head,即節(jié)點 1)→ last 指向 1

這就出問題了:原本應該反轉 “當前節(jié)點 1 的指針”,結果因為先移動了 head 到 2,導致實際修改的是 “節(jié)點 2 的指針”。節(jié)點 1 的指針根本沒反轉,后續(xù)循環(huán)也再也碰不到節(jié)點 1 了,鏈表直接從 1 這里斷了。

到此這篇關于Python 多變量賦值問題的文章就介紹到這了,更多相關Python 多變量賦值內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python爬蟲實戰(zhàn)之用selenium爬取某旅游網站

    Python爬蟲實戰(zhàn)之用selenium爬取某旅游網站

    上一篇我們已經知道怎么簡單使用selenium了,那么我們就從這篇博客來動手爬取網站吧,文中有非常詳細的代碼示例,需要的朋友可以參考下
    2021-06-06
  • Python中你不知道的gzip高級用法分享

    Python中你不知道的gzip高級用法分享

    在當今大數(shù)據時代,數(shù)據存儲和傳輸成本已成為每個開發(fā)者必須考慮的問題,Python 內置的 gzip 模塊提供了一種簡單高效的解決方案,下面小編就來和大家詳細講講吧
    2025-07-07
  • Python利用AI接口實現(xiàn)摳圖并改圖片底色

    Python利用AI接口實現(xiàn)摳圖并改圖片底色

    時候我們的證件照需要換底色,又來不及去照相館拍照,用ps也不好摳圖,所以今天給你們分享一下如何用python來摳圖,并換底色,需要的可以參考一下
    2022-09-09
  • anaconda如何創(chuàng)建和刪除環(huán)境

    anaconda如何創(chuàng)建和刪除環(huán)境

    這篇文章主要介紹了anaconda如何創(chuàng)建和刪除環(huán)境,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • Python實現(xiàn)的多進程和多線程功能示例

    Python實現(xiàn)的多進程和多線程功能示例

    這篇文章主要介紹了Python實現(xiàn)的多進程和多線程功能,結合實例形式分析了Python多線程與多進程實現(xiàn)分布式系統(tǒng)功能相關操作技巧,需要的朋友可以參考下
    2018-05-05
  • Python Web項目Cherrypy使用方法鏡像

    Python Web項目Cherrypy使用方法鏡像

    這篇文章主要介紹了Python Web項目Cherrypy使用方法鏡像,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • 關于Python核心框架tornado的異步協(xié)程的2種方法詳解

    關于Python核心框架tornado的異步協(xié)程的2種方法詳解

    今天小編就為大家分享一篇關于Python核心框架tornado的異步協(xié)程的2種方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python使用logging模塊記錄日志的操作

    python使用logging模塊記錄日志的操作

    在編寫?Python?程序時,日志記錄是一個非常重要的部分,日志不僅幫助你在開發(fā)過程中調試代碼,還可以在程序正式運行時提供診斷信息,幫助定位問題,在本文中,我們將介紹?Python?的?logging?模塊,幫助你了解如何使用這個模塊來記錄和管理日志,需要的朋友可以參考下
    2024-10-10
  • 使用Pytorch訓練分類問題時,分類準確率的計算方式

    使用Pytorch訓練分類問題時,分類準確率的計算方式

    這篇文章主要介紹了使用Pytorch訓練分類問題時,分類準確率的計算方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 如何使用Python在2秒內評估國際象棋位置詳解

    如何使用Python在2秒內評估國際象棋位置詳解

    關心編程語言的使用趨勢的人都知道,最近幾年,國內最火的兩種語言非Python與Go莫屬,下面這篇文章主要給大家介紹了關于如何使用Python在2秒內評估國際象棋位置的相關資料,需要的朋友可以參考下
    2022-05-05

最新評論

招远市| 乌拉特后旗| 嵊泗县| 承德县| 鄂托克前旗| 山东| 印江| 河池市| 鄢陵县| 磴口县| 抚顺县| 开原市| 潢川县| 江都市| 渭源县| 河津市| 固镇县| 尉氏县| 五莲县| 凭祥市| 六枝特区| 昆山市| 彩票| 当涂县| 泸溪县| 咸阳市| 蛟河市| 新建县| 万宁市| 蒙城县| 建湖县| 商城县| 铁岭市| 长治县| 阿合奇县| 宜兰市| 凤山县| 监利县| 崇明县| 探索| 冕宁县|