python3.6:學會兩行程式碼,深刻理解列表
阿新 • • 發佈:2019-02-07
一碼友問我兩行程式碼如何執行的,看似挺簡單,但涉及的知識點還挺多,值得細細分析,所以和大家分享。這兩行程式碼為:
a = [0, 1, 2, 3, 4, 5]
a[0:3],a[5]=[[2,3,4,5],7] #重點介紹這句程式
執行完畢上面兩行程式之後,大家猜猜,a的結果是多少?
正確答案為:
[2, 3, 4, 5, 3, 7, 5]
不知道聰明的你答對了沒。
我給大家分析下:要想理解a[0:3],a[5]=[[2, 3, 4, 5], 7]關鍵我們要熟知列表的解包、列表的可變性、列表切片、使用索引獲取列表值等知識點。
為了更容易理解,我們先將其轉換為:
a, b = [[2, 3, 4, 5], 7]
如果還不容易理解,可以再簡化為:
a, b = [2, 7]
我們將巢狀列表中的第一個列表元素用2來代替,這樣就簡單多了。只分析上面這個,如果聰明的你看書認真的話一定聽說過列表解包(unpack),什麼意思呢?就是2,賦值給a;7賦值給b.
一般來說左邊的變數個數要和右邊列表的元素(這裡的元素可以是列表、元祖、字串、數字、以及他們的巢狀組合)個數相同。如果不相同就會報錯:
這什麼錯誤呢?python給出的錯誤提示是太多的值要解包(預期2個),通俗講就是列表中要解包的值是3個,只給出了兩個變數來接收,變數少了。
理解了解包,我們容易知道執行
a, b = [[2, 3, 4, 5], 7]
後,a的值為[2, 3, 4, 5];b的值為7。
我們繼續往需要理解的程式碼語句上靠:
a[0:3],a[5]=[[2,3,4,5],7]
等號右邊將兩個元素解包給a[0:3],a[5],其中a[0:3]是可以理解為利用切片工具指向了列表
[0, 1, 2, 3, 4, 5]
中的[0, 1, 2]幾個元素,如果用[2, 3, 4, 5]賦值給a[0:3],可以更新[0, 1, 2]這幾個元素,
執行完①後,a列表為[2, 3, 4, 5, 3, 4, 5]。
下面繼續執行②,將7賦值給a[5],也就是將[2, 3, 4, 5, 3, 4, 5]中的第6個元素更新為7。至此,語句執行完畢,列表a最後為:
[2, 3, 4, 5, 3, 7, 5]。執行結果如下圖:
總結下,這兩個語句看似簡單,但蘊含了大量的知識點,這也體現了python的簡介的特點。