# 列表
`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 修订记录
- 术语表