# 列表
`list`是處理一組有序項目的數據結構,即你可以在一個列表中存儲一個 序列 的項目。假想你有一個購物列表,上面記載著你要買的東西,你就容易理解列表了。只不過在你的購物表上,可能每樣東西都獨自占有一行,而在Python中,你在每個項目之間用逗號分割。
列表中的項目應該包括在方括號中,這樣Python就知道你是在指明一個列表。一旦你創建了一個列表,你可以添加、刪除或是搜索列表中的項目。由于你可以增加或刪除項目,我們說列表是 可變的 數據類型,即這種類型是可以被改變的。
盡管我一直推遲討論對象和類,但是現在對它們做一點解釋可以使你更好的理解列表。我們會在相應的[章節](ch11.html)詳細探索這個主題。
列表是使用對象和類的一個例子。當你使用變量`i`并給它賦值的時候,比如賦整數`5`,你可以認為你創建了一個**類**(類型)`int`的**對象**(實例)`i`。事實上,你可以看一下`help(int)`以更好地理解這一點。
類也有**方法**,即僅僅為類而定義地函數。僅僅在你有一個該類的對象的時候,你才可以使用這些功能。例如,Python為`list`類提供了`append`方法,這個方法讓你在列表尾添加一個項目。例如`mylist.append('an item')`列表`mylist`中增加那個字符串。注意,使用點號來使用對象的方法。
一個類也有**域**,它是僅僅為類而定義的變量。僅僅在你有一個該類的對象的時候,你才可以使用這些變量/名稱。類也通過點號使用,例如`mylist.field`。
```
#!/usr/bin/python
# Filename: using_list.py
# This is my shopping list
shoplist = ['apple', 'mango', 'carrot', 'banana']
print 'I have', len(shoplist),'items to purchase.'
print 'These items are:', # Notice the comma at end of the line
for item in shoplist:
????print item,
print '\nI also have to buy rice.'
shoplist.append('rice')
print 'My shopping list is now', shoplist
print 'I will sort my list now'
shoplist.sort()
print 'Sorted shopping list is', shoplist
print 'The first item I will buy is', shoplist[0]
olditem = shoplist[0]
del shoplist[0]
print 'I bought the', olditem
print 'My shopping list is now', shoplist
```
(源文件:[code/using_list.py](code/using_list.py))
## 輸出
```
$ python using_list.py
I have 4 items to purchase.
These items are: apple mango carrot banana
I also have to buy rice.
My shopping list is now ['apple', 'mango', 'carrot', 'banana', 'rice']
I will sort my list now
Sorted shopping list is ['apple', 'banana', 'carrot', 'mango', 'rice']
The first item I will buy is apple
I bought the apple
My shopping list is now ['banana', 'carrot', 'mango', 'rice']
```
## 它如何工作
變量`shoplist`是某人的購物列表。在`shoplist`中,我們只存儲購買的東西的名字字符串,但是記住,你可以在列表中添加 任何種類的對象 包括數甚至其他列表。
我們也使用了`for..in`循環在列表中各項目間遞歸。從現在開始,你一定已經意識到列表也是一個序列。序列的特性會在后面的[章節](ch09s05.html)中討論。
注意,我們在`print`語句的結尾使用了一個 逗號 來消除每個`print`語句自動打印的換行符。這樣做有點難看,不過確實簡單有效。
接下來,我們使用`append`方法在列表中添加了一個項目,就如前面已經討論過的一樣。然后我們通過打印列表的內容來檢驗這個項目是否確實被添加進列表了。打印列表只需簡單地把列表傳遞給`print`語句,我們可以得到一個整潔的輸出。
再接下來,我們使用列表的`sort`方法來對列表排序。需要理解的是,這個方法影響列表本身,而不是返回一個修改后的列表——這與字符串工作的方法不同。這就是我們所說的列表是 可變的 而字符串是 不可變的 。
最后,但我們完成了在市場購買一樣東西的時候,我們想要把它從列表中刪除。我們使用`del`語句來完成這個工作。這里,我們指出我們想要刪除列表中的哪個項目,而`del`語句為我們從列表中刪除它。我們指明我們想要刪除列表中的第一個元素,因此我們使用`del shoplist[0]`(記住,Python從0開始計數)。
如果你想要知道列表對象定義的所有方法,可以通過`help(list)`獲得完整的知識。
- 版權信息
- 前言
- 本書的由來
- 本書目前的狀況
- 約定條款
- 反饋
- 值得思考的一些東西
- 第1章 介紹
- Python的特色
- 為什么不使用Perl?
- 程序員的話
- 第2章 安裝Python
- Windows?用戶
- 概括
- 第3章 最初的步驟
- 使用帶提示符的解釋器
- 挑選一個編輯器
- 使用源文件
- 可執行的Python程序
- 獲取幫助
- 概括
- 第4章 基本概念
- 數
- 字符串
- 變量
- 標識符的命名
- 數據類型
- 對象
- 邏輯行與物理行
- 縮進
- 概括
- 第5章 運算符與表達式
- 運算符
- 運算符優先級
- 表達式
- 概括
- 第6章 控制流
- if語句
- while語句
- for循環
- break語句
- continue語句
- 概括
- 第7章 函數
- 函數形參
- 局部變量
- 默認參數值
- 關鍵參數
- return語句
- DocStrings
- 概括
- 第8章 模塊
- 字節編譯的.pyc文件
- from..import語句
- 模塊的name
- 制造你自己的模塊
- dir()函數
- 概括
- 第9章 數據結構
- 列表
- 元組
- 字典
- 序列
- 參考
- 更多字符串的內容
- 概括
- 第10章 解決問題——編寫一個Python腳本
- 解決方案
- 軟件開發過程
- 概括
- 第11章 面向對象的編程
- self
- 類
- 對象的方法
- __init__方法
- 類與對象的方法
- 繼承
- 概括
- 第12章 輸入/輸出
- 儲存器
- 概括
- 第13章 異常
- try..except
- 引發異常
- try..finally
- 概括
- 第14章 Python標準庫
- sys模塊
- os模塊
- 概括
- 第15章 更多Python的內容
- 單語句塊
- 列表綜合
- 在函數中接收元組和列表
- lambda形式
- exec和eval語句
- assert語句
- repr函數
- 概括
- 第16章 接下來學習什么?
- 探索更多內容
- 概括
- 附錄A 自由/開放源碼軟件(FLOSS)
- 附錄B 關于本書
- 關于作者
- 關于譯者
- 關于簡體中文譯本
- 附錄C 修訂記錄
- 術語表