這幾種資料結構的共性:
都是順序存儲
順序通路
可疊代對象(可疊代對象可以用len方法擷取其長度)
通過索引進行元素的通路
可以進行切片操作
切片不會對原有的序列做任何修改,切片的文法為:
從索引<code>start</code>開始,到索引<code>stop</code>結束,不包含<code>stop</code>,傳回新的序列,不會對原有的對象做任何修改。
幾個特性:
<code>start</code>超出索引範圍:<code>start = 0</code>
<code>stop</code>超出索引範圍:<code>stop = -1</code>
負數索引:實際上可轉化為:<code>len(seq) + index</code>
當<code>start &gt;= stop</code>時,傳回空清單
slice的實作:
運作結果為:
如果有了步長之後,上面的規則就會發生變化。接下來加入步長的slice實作:
切片的一些常用操作:
如果索引超出範圍,将引發<code>IndexError</code>的異常。修改元素的時候,如果超出索引範圍,也同樣引發<code>IndexError</code>異常。
<code>index(value)</code>方法根據value找索引
<code>count(value)</code>方法統計value出現的次數
enumerate的實作:
清單批量指派:
不建議使用以上的方式對切片指派的操作。
解構與封裝可以叫做解包與封包。
解構把集合裡的元素複制給變量;
封裝是用變量建構元組。
解構:按照元素順序,把線性解構的元素依次指派給變量。
封裝的例子:
定義一個元組,可以省略小括号。
封裝出來的是元組。封裝沒有什麼難度。解構的變化多樣,接下來重點看看解構。
先看一個例子:
對上面的代碼進行改寫,由3行代碼,變成了一行代碼:
對于如下的代碼操作,就是解包:
上面的代碼使用的是元組,清單也是可以的:
接下來看一下封包:
繼續看例子:
如果對一個含有2個元素的清單進行解包:
如果對一個含有一個元素的清單進行解包:
如果對一個空清單進行解包:
針對上述例子的總結:
左邊不能隻有一個星号,還要有其他元素
如果左邊不用星号,那麼左邊的元素個數要與右邊的元素個數相同
左邊變量數小于右邊元素個數,且左邊沒有加星号會報錯
元素按照順序指派給變量
變量和元素必須比對
加星号變量,可以接收任意個數的元素
加星号的變量不能單獨出現
針對上述,寫一個具體的例子:
更複雜一點的例子:
下面這個例子,在Python2中不能實作:
接下來還有更好玩的,如果我們要丢棄=右邊某個值,可以使用下劃線來,示範如下:
如果我們隻想要序列的首位兩個元素,可以這樣操作:
再來一發,兩邊結構要一樣:
對上面的例子,再來稍微變化一下,不過兩邊的結構要一樣,解構是支援多層次的。:
注意:
解包的時候,兩邊的結構要一緻 (重要的事情說三遍)
隻要兩邊結構一樣就行
python的一個慣例,使用單個下劃線表示丢棄該變量。單個下劃線也是Python合法的辨別符,但是如果不是要丢棄一個變量,通常不要用單個下劃線表示一個有意義的變量。
非常複雜的資料結構,多層嵌套的線性結構的時候,可以用解構快速提取其中的值。
版權聲明:原創作品,如需轉載,請注明出處。否則将追究法律責任
本文轉自 bigstone2012 51CTO部落格,原文連結:http://blog.51cto.com/lavenliu/2044036