自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么a, b = b, a結(jié)果跟你想的不一樣?

開(kāi)發(fā) 后端
這個(gè)特性,也是很多人介紹Python比其它語(yǔ)言優(yōu)越的一個(gè)案例。但實(shí)際上,這種交換變量的方式,在某些特殊情況下,它的行為可能跟你想要的不一樣。我們來(lái)看一個(gè)案例。

[[410838]]

我們知道,在Python里面要交換兩個(gè)變量,可以用一行代碼實(shí)現(xiàn):

  1. a, b = b, a 

例如:

這個(gè)特性,也是很多人介紹Python比其它語(yǔ)言優(yōu)越的一個(gè)案例。

但實(shí)際上,這種交換變量的方式,在某些特殊情況下,它的行為可能跟你想要的不一樣。我們來(lái)看一個(gè)案例。

在一些in-place排序算法中,我們會(huì)交換一個(gè)列表中兩個(gè)索引對(duì)應(yīng)的內(nèi)容,例如:

這看起來(lái)沒(méi)有什么問(wèn)題。更進(jìn)一步,如果交換的代碼寫(xiě)為:

  1. a = [0, 2, 1, 3, 5, 6] 
  2. a[a[1] + 1], a[1] = a[1], a[a[1] + 1] 

運(yùn)行效果如下圖所示:

你肯定覺(jué)得顯然是成立的,因?yàn)閍[1]的值是2,a[1] + 1的值是3,所以上面這段代碼看起來(lái)相當(dāng)于把列表下標(biāo)為1和下標(biāo)為3的兩個(gè)數(shù)字交換順序。也就是把元素2和元素3交換順序。

我們平時(shí)一般覺(jué)得:a, b = b, a和 b, a = a, b這兩種寫(xiě)法應(yīng)該是沒(méi)有什么區(qū)別的。都是交換兩個(gè)變量。但是對(duì)于上面這個(gè)列表,如果我交換一下逗號(hào)左右兩邊的數(shù)據(jù),我們?cè)倏矗?/p>

  1. a = [0, 2, 1, 3, 5, 6] 
  2. a[1], a[a[1] + 1] = a[a[1] + 1], a[1] 

運(yùn)行結(jié)果如下:

代碼運(yùn)行結(jié)果跟修改之前竟然不一樣。

之所以會(huì)出現(xiàn)這種情況,是因?yàn)檫@種交換兩個(gè)值的方式,雖然只有一行代碼,但是 Python 在執(zhí)行的時(shí)候,其實(shí)是分成兩步來(lái)走的。

對(duì)于a[1], a[a[1] + 1] = a[a[1] + 1], a[1],首先,Python 執(zhí)行的是a[1] = a[a[1] + 1],也就是a[1] = a[3]。這個(gè)時(shí)候,列表變成了[0, 3, 1, 3, 5, 6]。然后,Python 再執(zhí)行a[a[1] + 1] = a[1],注意這個(gè)時(shí)候的a[1]的值已經(jīng)是3了。也就變成了a[4] = a[1]。所以原來(lái)a[4]位置的5就被a[1]位置的數(shù)字3覆蓋了。所以最終的結(jié)果就變成了[0, 3, 1, 3, 2, 6]。

所以,在使用 Python 這種一行交換兩個(gè)變量的語(yǔ)法糖的時(shí)候,如果需要對(duì)列表里面的元素進(jìn)行交換,請(qǐng)一定要小心,不要由于執(zhí)行順序的問(wèn)題導(dǎo)致結(jié)果跟想要的不一致。

本文轉(zhuǎn)載自微信公眾號(hào)「未聞Code」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系未聞Code公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 未聞Code
相關(guān)推薦

2012-12-20 10:17:32

IT運(yùn)維

2012-03-07 17:24:10

戴爾咨詢

2011-09-02 10:12:36

網(wǎng)速測(cè)試結(jié)果網(wǎng)速測(cè)試網(wǎng)速測(cè)試方法

2021-01-11 14:02:22

dudf運(yùn)維

2023-08-03 06:50:28

AMD蘇姿2核心

2016-05-09 18:40:26

VIP客戶緝拿

2020-02-14 14:36:23

DevOps落地認(rèn)知

2017-05-25 15:02:46

聯(lián)宇益通SD-WAN

2015-10-19 12:33:01

華三/新IT

2022-02-09 08:00:00

機(jī)器學(xué)習(xí)深度學(xué)習(xí)Keras

2023-03-20 08:19:23

GPT-4OpenAI

2012-07-18 02:05:02

函數(shù)語(yǔ)言編程語(yǔ)言

2018-07-10 11:05:55

Emoji蘋(píng)果Google

2018-05-09 15:42:24

新零售

2009-06-12 15:26:02

2009-02-04 15:43:45

敏捷開(kāi)發(fā)PHPFleaPHP

2009-12-01 16:42:27

Gentoo Linu

2010-11-24 20:18:48

Microsoft L統(tǒng)一溝通

2011-02-28 10:38:13

Windows 8

2016-03-24 18:51:40

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)