Python中清單是可變的,這是它差別于字元串和元組的最重要的特點,一句話概括即:清單可以修改,而字元串和元組不能。
以下是 Python 中清單的方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<code>>>> a </code><code>=</code> <code>[</code><code>66.25</code><code>, </code><code>333</code><code>, </code><code>333</code><code>, </code><code>1</code><code>, </code><code>1234.5</code><code>]</code>
<code>>>> </code><code>print</code><code>(a.count(</code><code>333</code><code>), a.count(</code><code>66.25</code><code>), a.count(</code><code>'x'</code><code>))</code>
<code>2</code> <code>1</code> <code>0</code>
<code>>>> a.insert(</code><code>2</code><code>, </code><code>-</code><code>1</code><code>)</code>
<code>>>> a.append(</code><code>333</code><code>)</code>
<code>>>> a</code>
<code>[</code><code>66.25</code><code>, </code><code>333</code><code>, </code><code>-</code><code>1</code><code>, </code><code>333</code><code>, </code><code>1</code><code>, </code><code>1234.5</code><code>, </code><code>333</code><code>]</code>
<code>>>> a.index(</code><code>333</code><code>)</code>
<code>1</code>
<code>>>> a.remove(</code><code>333</code><code>)</code>
<code>[</code><code>66.25</code><code>, </code><code>-</code><code>1</code><code>, </code><code>333</code><code>, </code><code>1</code><code>, </code><code>1234.5</code><code>, </code><code>333</code><code>]</code>
<code>>>> a.reverse()</code>
<code>[</code><code>333</code><code>, </code><code>1234.5</code><code>, </code><code>1</code><code>, </code><code>333</code><code>, </code><code>-</code><code>1</code><code>, </code><code>66.25</code><code>]</code>
<code>>>> a.sort()</code>
<code>[</code><code>-</code><code>1</code><code>, </code><code>1</code><code>, </code><code>66.25</code><code>, </code><code>333</code><code>, </code><code>333</code><code>, </code><code>1234.5</code><code>]</code>
注意:類似 insert, remove 或 sort 等修改清單的方法沒有傳回值。
清單方法使得清單可以很友善的作為一個堆棧來使用,堆棧作為特定的資料結構,最先進入的元素最後一個被釋放(後進先出)。用 append() 方法可以把一個元素添加到堆棧頂。用不指定索引的 pop() 方法可以把一個元素從堆棧頂釋放出來。例如:
<code>>>> stack </code><code>=</code> <code>[</code><code>3</code><code>, </code><code>4</code><code>, </code><code>5</code><code>]</code>
<code>>>> stack.append(</code><code>6</code><code>)</code>
<code>>>> stack.append(</code><code>7</code><code>)</code>
<code>>>> stack</code>
<code>[</code><code>3</code><code>, </code><code>4</code><code>, </code><code>5</code><code>, </code><code>6</code><code>, </code><code>7</code><code>]</code>
<code>>>> stack.pop()</code>
<code>7</code>
<code>[</code><code>3</code><code>, </code><code>4</code><code>, </code><code>5</code><code>, </code><code>6</code><code>]</code>
<code>6</code>
<code>5</code>
<code>[</code><code>3</code><code>, </code><code>4</code><code>]</code>
也可以把清單當做隊列用,隻是在隊列裡第一個加入的元素,第一個取出來(先進先出);需要通過deque子產品把清單轉換成隊列,通過popleft函數來釋放元素,但是拿清單用作這樣的目的效率不高。在清單的最後添加或者彈出元素速度快,然而在清單裡插入或者從頭部彈出速度卻不快(因為所有其他的元素都得一個一個地移動)。
清單推導式提供了從序列建立清單的簡單途徑。通常應用程式将一些操作應用于某個序列的每個元素,用其獲得的結果作為生成新清單的元素,或者根據确定的判定條件建立子序列。
每個清單推導式都在 for 之後跟一個表達式,然後有零到多個 for 或 if 子句。傳回結果是一個根據表達從其後的 for 和 if 上下文環境中生成出來的清單。如果希望表達式推導出一個元組,就必須使用括号。
這裡我們将清單中每個數值乘三,獲得一個新的清單:
運作結果:
[3, 6, 9]
從以上示例可以得知,所謂推導式就是寫在方括号裡的一個混合表達式,這個表達式會傳回出一個新的清單對象(如果使用的是方括号的話)
還可以生成二維清單:
[[1, 1], [2, 8], [3, 27]]
還可以對序列裡的每一個元素逐個調用某方法:
可以使用 if 語句過濾一些元素:
以下是一些關于循環和其它技巧的示範:
清單推導式可以使用複雜表達式或嵌套函數:
Python的清單還可以嵌套,也就是二維清單。
以下執行個體展示了3X4的矩陣清單:
以下執行個體将3X4的矩陣清單轉換為4X3清單:
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
以上這種轉換是通過清單推導式生成的一個新清單,除此之外也可以用循環來實作:
[ 1 ] [ 5 ] [ 9 ] [ 2 ] [ 6 ] [ 10 ] [ 3 ] [ 7 ] [ 11 ] [ 4 ] [ 8 ] [ 12 ]
以下執行個體也可以實作:
還有一種實作方法,這種方式就比較繁瑣了:
使用 del 語句可以從一個清單中依索引而不是值來删除一個元素。這與使用 pop() 傳回一個值不同。可以用 del 語句從清單中删除一個切割,或清空整個清單(我們以前介紹的方法是給該切割賦一個空清單)。例如:
元組可以由若幹逗号分隔的值組成,例如:
如你所見,元組在輸出時總是有括号的,以便于正确表達嵌套結構。在輸入時可能有或沒有括号, 不過括号通常是必須的(如果元組是更大的表達式的一部分)。
我們都知道元組裡的值是不可變的,但是如果元組裡的值是一個可變對象,則修改該可變對象的值,會導緻元組的值也跟着改變:
([1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]) ([1, 2, 3, 4], [5], [9, 10, 11, 12])
集合是一個無序并且不重複元素的集。基本功能包括關系測試和消除重複元素。
需要使用大括号 { } 來建立集合。注意:如果要建立一個空集合,你必須用 set() 而不是 { } ;後者建立的是一個空的字典。
以下是一個簡單的示範:
集合也支援推導式:
另一個非常有用的 Python 内建資料類型是字典。
序列是以連續的整數為索引,與此不同的是,字典以關鍵字為索引,關鍵字可以是任意不可變類型,通常用字元串或數值。
了解字典的最佳方式是把它看做無序的鍵/值對集合。在同一個字典之内,鍵必須是唯一的。
使用一對大括号建立一個空的字典:{ }
這是一個字典運用的簡單例子:
構造函數 dict() 可以直接從鍵值對元組清單中建構字典。如果有固定的模式,清單推導式指定特定的鍵值對:
如果關鍵字隻是簡單的字元串,使用關鍵字參數指定鍵值對有時候更友善:
此外,字典推導可以用來建立任意鍵和值的表達式詞典:
在字典中周遊時,關鍵字和對應的值可以使用 items() 方法同時讀取出來:
在序列中周遊時,下标位置和對應值可以使用 enumerate() 函數同時得到:
同時周遊兩個或更多的序列,可以使用 zip()函數組合起來:
要反向周遊一個序列,首先指定這個序列,然後調用 reversed() 函數,reversed就是用來反向序列的:
6 5 4 3 2 1
要按順序周遊一個序列,使用 sorted() 函數傳回一個已排序的序列,并不修改原值,sorted是用來排序的,與sort函數不同的是sorted會生成一個新的清單:
sort函數僅是對原本的清單進行排序,不會生成新的清單對象:
2 4 12 56 65 84 85 123 本文轉自 ZeroOne01 51CTO部落格,原文連結:http://blog.51cto.com/zero01/1978147,如需轉載請自行聯系原作者