亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Python 中交換表達式中的表達式(交換三個或更多 var)

在 Python 中交換表達式中的表達式(交換三個或更多 var)

手掌心 2021-12-26 14:41:29
我嘗試在 Python 中分配三個表達式,但結果出乎意料。讓我們從簡單的交換開始。你可能知道這個任務的結果:A = [10, 11, 12]p = 0A[p + 1], A[p] = A[p], A[p + 1]    # <--print(A)結果是(如預期的那樣):[11, 10, 12]現在我想更大膽一點,所以嘗試了這個任務:A = [10, 11, 12]p = 0p, A[p + 1], A[p] = p + 1, A[p], A[p + 1]   # <--print(A)我以為結果會是:[10, 12, 11]然而,結果是:[10, 11, 10]這是出乎意料的!我閱讀了有關作業的 Python 文檔:盡管賦值的定義意味著左側和右側之間的重疊是“同時”的(例如 a, b = b,a 交換兩個變量),但分配給變量的集合內的重疊發生在左側- 向右,有時會導致混亂。例如,以下程序打印 [0, 2]:x = [0, 1]i = 0i, x[i] = 1, 2         # i is updated, then x[i] is updatedprint(x)我的交換沒有得到類似的結果。我不明白我的交換背后的邏輯。這是怎么回事?
查看完整描述

1 回答

?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

您可以將其視為使用臨時變量從左到右連續賦值的簡寫:


p, A[p + 1], A[p] = p + 1, A[p], A[p + 1]

相當于


temp1  = p + 1  # 1

temp2  = A[p]   # 10  (A[0])

temp3  = A[p+1] # 11  (A[1])

p      = temp1   # p    = 1

A[p+1] = temp2   # A[2] = 10

A[p]   = temp3   # A[1] = 11

所以 A = [10,11,10]


如果你放在p列表的末尾,你可能會更接近你的預期結果:


A[p + 1], A[p], p = A[p], A[p + 1], p + 1


A is now [11,10,12]

P is now 1

換句話說,后增量是可能的,但在這種情況下(其中在源數據中使用了預增量索引),預增量不起作用


您可以通過手動計算源數據中的偏移量來實現,但這有點違反直覺:


p, A[p+1], A[p] = p+1, A[p+1], A[p+2]


查看完整回答
反對 回復 2021-12-26
  • 1 回答
  • 0 關注
  • 216 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號