天天看點

005-Python之清單,元組,字元串,bytes及bytearray共有操作

這幾種資料結構的共性:

都是順序存儲

順序通路

可疊代對象(可疊代對象可以用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 &amp;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