成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 后端
這個特性,也是很多人介紹Python比其它語言優越的一個案例。但實際上,這種交換變量的方式,在某些特殊情況下,它的行為可能跟你想要的不一樣。我們來看一個案例。

[[410838]]

我們知道,在Python里面要交換兩個變量,可以用一行代碼實現:

  1. a, b = b, a 

例如:

這個特性,也是很多人介紹Python比其它語言優越的一個案例。

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

在一些in-place排序算法中,我們會交換一個列表中兩個索引對應的內容,例如:

這看起來沒有什么問題。更進一步,如果交換的代碼寫為:

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

運行效果如下圖所示:

你肯定覺得顯然是成立的,因為a[1]的值是2,a[1] + 1的值是3,所以上面這段代碼看起來相當于把列表下標為1和下標為3的兩個數字交換順序。也就是把元素2和元素3交換順序。

我們平時一般覺得:a, b = b, a和 b, a = a, b這兩種寫法應該是沒有什么區別的。都是交換兩個變量。但是對于上面這個列表,如果我交換一下逗號左右兩邊的數據,我們再看:

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

運行結果如下:

代碼運行結果跟修改之前竟然不一樣。

之所以會出現這種情況,是因為這種交換兩個值的方式,雖然只有一行代碼,但是 Python 在執行的時候,其實是分成兩步來走的。

對于a[1], a[a[1] + 1] = a[a[1] + 1], a[1],首先,Python 執行的是a[1] = a[a[1] + 1],也就是a[1] = a[3]。這個時候,列表變成了[0, 3, 1, 3, 5, 6]。然后,Python 再執行a[a[1] + 1] = a[1],注意這個時候的a[1]的值已經是3了。也就變成了a[4] = a[1]。所以原來a[4]位置的5就被a[1]位置的數字3覆蓋了。所以最終的結果就變成了[0, 3, 1, 3, 2, 6]。

所以,在使用 Python 這種一行交換兩個變量的語法糖的時候,如果需要對列表里面的元素進行交換,請一定要小心,不要由于執行順序的問題導致結果跟想要的不一致。

本文轉載自微信公眾號「未聞Code」,可以通過以下二維碼關注。轉載本文請聯系未聞Code公眾號。

 

責任編輯:武曉燕 來源: 未聞Code
相關推薦

2012-03-07 17:24:10

戴爾咨詢

2012-12-20 10:17:32

IT運維

2011-09-02 10:12:36

網速測試結果網速測試網速測試方法

2021-01-11 14:02:22

dudf運維

2023-08-03 06:50:28

AMD蘇姿2核心

2017-05-25 15:02:46

聯宇益通SD-WAN

2016-05-09 18:40:26

VIP客戶緝拿

2015-10-19 12:33:01

華三/新IT

2020-02-14 14:36:23

DevOps落地認知

2022-02-09 08:00:00

機器學習深度學習Keras

2023-03-20 08:19:23

GPT-4OpenAI

2012-07-18 02:05:02

函數語言編程語言

2018-07-10 11:05:55

Emoji蘋果Google

2018-05-09 15:42:24

新零售

2009-02-04 15:43:45

敏捷開發PHPFleaPHP

2009-12-01 16:42:27

Gentoo Linu

2011-02-28 10:38:13

Windows 8

2009-06-12 15:26:02

2016-03-24 18:51:40

2010-11-24 20:18:48

Microsoft L統一溝通
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜精品久久久久久久99黑人 | 国产成人精品综合 | 日韩免费高清视频 | 黄色片在线看 | 欧美成人综合 | 97人人澡人人爽91综合色 | 伊大人久久 | 九九精品在线 | 国产精品久久久久久久久久软件 | 国产免费又黄又爽又刺激蜜月al | 中文字幕日韩欧美一区二区三区 | 曰韩三级 | 日本一区二区三区免费观看 | 精品久久久久久久久久久久久久 | 亚洲国产成人精品女人久久久野战 | 久久久精品一区二区三区 | 91国产精品 | 欧美二区在线 | va精品 | 99久久精品国产麻豆演员表 | 日韩成人精品一区二区三区 | 日本免费一区二区三区 | 国产丝袜一区二区三区免费视频 | 免费成人午夜 | 日韩欧美一区二区三区四区 | 牛牛热在线视频 | 成人免费视频网站在线看 | 狠狠色综合久久婷婷 | 一区二区三区亚洲视频 | 搞黄网站在线观看 | 九九色综合 | 91久久久久久久久久久 | 日本三级电影在线免费观看 | 欧美一区二区三区四区在线 | 男人天堂久久久 | 日韩欧美中文 | 亚洲欧美视频一区 | 国产精品中文字幕在线观看 | 91精品国产乱码麻豆白嫩 | 亚洲精品乱码8久久久久久日本 | 三级免费网 |