本系列的第二篇文章 探索 Python(2): 探索 Python 类型的层次结构 —— 了解对象和容器,介绍了 Python 类型的层次结构,其中包括容器对象。这篇文章演示了 tuple
,这是一个不可变的序列。本系列的第三篇文章 探索 Python(3): 探索 Python 类型的层次结构 —— 使用字符串 介绍了 Python string
,这也是一个不可变的序列,但仅针对字符数据。作为不可变的序列,tuple
和 string
对象在创建之后便无法修改。如果需要修改其中的一个,则必须创建相应类型的新容器,以便容纳新数据。本文介绍一个新的序列类型:list
,这是一个可变的序列类型,并演示以多种不同方法使用它。
Python list
在介绍 Python tuple
时,我使用了类比的方法,将其比做一个袋子,您可以在袋子中存放不同的东西。Python list
与此非常类似,因此,它的功能与袋子的功能也非常类似。但有一点是不同的,即您可以使用方括号创建 list
,如清单 1 所示。
清单 1. 在 Python 中创建一个 list
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>> l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> type(l) <type 'list'> >>> el = [] # Create an empty list >>> len(el) 0 >>> sl = [1] # Create a single item list >>> len(sl) 1 >>> sl = [1,] # Create a single item list, as with a tuple >>> len(sl) 1 |
本例展示如何创建包含从 0 到 9(包括 0 和 9)的简单 list
,以及如何创建一个空列表和一个包含单个条目的列表。如果您还记得的话,创建单个条目的 tuple
还需要在单个条目后面跟一个逗号。这是区分单个条目 tuple
与方法调用的必要条件,这一点将在以后的文章中详细讨论。而对于 list
,则是不必要的,尽管也允许使用单个逗号。
与往常一样,要获取有关 Python 主题的更多信息,您可以使用内置的帮助解释器,例如,清单 2 展示了如何开始 list
类的帮助描述。
清单 2. 获取有关 list
的帮助
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>> help(list) Help on class list in module __builtin__: class list(object) | list() -> new list | list(sequence) -> new list initialized from sequence's items | | Methods defined here: | | __add__(...) | x.__add__(y) <==> x+y | | __contains__(...) | x.__contains__(y) <==> y in x | ... |
如果仔细观察清单 2 中对 list
类的描述,您会看到其中提供了两个不同的构造函数:一个没有参数,另一个接受一个序列类作为参数。因此,使用构造函数及方括号简化符号,可以创建 list
。这就提供了很大的灵活性,原因是您可以方便地将现有的序列,如 tuple
或 string
转换为 list
,如清单 3 所示。不过,请注意,传递的参数必须是序列 —— 并且不只是对象序列 —— 否则将会出现错误。对于任何序列类型,您都可以使用 len
方法容易地查找序列中条目的数量。
清单 3. 直接创建 list
对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
>>> l = list() >>> type(l) <type 'list'> >>> len(l) 0 >>> l [] >>> l = list((0, 1, 2, 3, 4, 5, 6, 7, 8, 9)) # Create a list from a tuple >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> len(l) 10 >>> l = list([0, 1, 2, 3, 4, 5, 6, 7, 8ayon-h"> 4, 5, 6, 7, 8ple,这是一个不可变的序列。本系列的第三篇文章 探索 Python(3): 探索 Python 类型的层次结构 —— 使用字符串 介绍了 Python string ,这也是一个不可变的序列,但仅针对字符数据。作为不可变的序列,tuple 和 string 对象在创建之后便无法修改。如果需要修改其中的一个,则必须创建相应类型的新容器,以便容纳新数据。本文介绍一个新的序列类型:list ,这是一个可变的序列类型,并演示以多种不同方法使用它。
Python list在介绍 Python 清单 1. 在 Python 中创建一个
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>> l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> type(l) <type 'list'> >>> el = [] # Create an empty list >>> len(el) 0 >>> sl = [1] # Create a single item list >>> len(sl) 1 >>> sl = [1,] # Create a single item list, as with a tuple >>> len(sl) 1 |
本例展示如何创建包含从 0 到 9(包括 0 和 9)的简单 list
,以及如何创建一个空列表和一个包含单个条目的列表。如果您还记得的话,创建单个条目的 tuple
还需要在单个条目后面跟一个逗号。这是区分单个条目 tuple
与方法调用的必要条件,这一点将在以后的文章中详细讨论。而对于 list
,则是不必要的,尽管也允许使用单个逗号。
与往常一样,要获取有关 Python 主题的更多信息,您可以使用内置的帮助解释器,例如,清单 2 展示了如何开始 list
类的帮助描述。
清单 2. 获取有关 list
的帮助
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>> help(list) Help on class list in module __builtin__: class list(object) | list() -> new list | list(sequence) -> new list initialized from sequence's items | | Methods defined here: | | __add__(...) | x.__add__(y) <==> x+y | | __contains__(...) | x.__contains__(y) <==> y in x | ... |
如果仔细观察清单 2 中对 list
类的描述,您会看到其中提供了两个不同的构造函数:一个没有参数,另一个接受一个序列类作为参数。因此,使用构造函数及方括号简化符号,可以创建 list
。这就提供了很大的灵活性,原因是您可以方便地将现有的序列,如 tuple
或 string
转换为 list
,如清单 3 所示。不过,请注意,传递的参数必须是序列 —— 并且不只是对象序列 —— 否则将会出现错误。对于任何序列类型,您都可以使用 len
方法容易地查找序列中条目的数量。
清单 3. 直接创建 list
对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
>>> l = list() >>> type(l) <type 'list'> >>> len(l) 0 >>> l [] >>> l = list((0, 1, 2, 3, 4, 5, 6, 7, 8, 9)) # Create a list from a tuple >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> len(l) 10 >>> l = list([0, 1, 2, 3, 4, 5, 6, 7, 8line crayon-striped-line" id="crayon-5812b41332017393120043-14"> |