006.Python对象类型——列表

 

  Hey~

我们又见面啦~

你还好吗?
2017.08.23








这一期为大家带来的是 Python 的列表。列表是 Python 中最具灵活性的有序集合对象类型,与字符串不同的是,列表可以包含任何种类的对象:数字、字符串甚至其他列表。同样,与字符串不同,列表都是可变对象,它们都支持在原处修改的操作,可以通过指定的偏移值和分片、列表方法调用、删除语句等方法来实现。
实际应用中的列表
理解列表最好的方法可能还是要在实践中体会它们是如何运作的,让我们看几个简单的解释器交互的例子来说明。
基本列表操作


由于列表是序列,它支持很多与字符串相同的操作。例如,列表对 + 和 * 操作的响应与字符串很相似,两个操作的意思也是合并和重复,只不过结果是一个新的列表,而不是一个字符串:
注意
这是需要注意一下的就是 + 两边必须是相同类型的序列,否则运行时会出现类型错误。例如,不能将一个列表和一个字符串合并到一起。
列表迭代和解析


更广泛地说,列表对于我们在上一讲对字符串使用的所有序列操作都能做出响应,包括迭代工具:
我会在后面来讨论迭代和 range 内置函数,因为它们都与语句语法有关。简而言之,for 循环从左到右地遍历任何序列中的项,对每一项执行一条或多条语句。上面也涉及到了列表解析和 map 调用,它们也是在后提到,列表解析只不过是通过对序列中的每一项应用一个表达式来构建一个新的列表的方式,它与 for 循环密切相关。列表解析的编码会更简单,而且如今运行起来更快。map 内置函数对序列中的各项应用一个函数并把结果收集到一个新的列表中。
索引、分片和矩阵


由于列表都是序列,对于列表而言,索引和分片操作与字符串中的操作基本相同。然而对列表进行索引的结果就是你指定的偏移处的对象(不管是什么类型),而对列表进行分片时往往返回一个新的列表。
注意
由于可以在列表中嵌套列表,有时需要将几次索引操作连在一起使用来深入到数据结构中去。以下举个例子是将其表示为矩阵(多维数组):
如果使用一次索引,会得到一整行(实际上,也就是嵌套的子列表),如果使用两次索引,你将会得到某一行里的其中一项。关于矩阵,NumPy扩展提供了处理矩阵的其他方式。
原处修改列表


由于列表是可变的,它们支持原处改变列表对象的操作。也就是说,本节中的操作都可以直接修改列表的对象,而不会像字符串那样强迫你建立一个新的拷贝。因为 Python 只处理对象引用,所以需要将原处修改一个对象与生成一个新对象区分开来,如果你在原处修改一个对象时,可能会影响一个以上指向它的引用。
当使用列表的时候,可以将它赋值给一个特定项(偏移)或整个片段(分片)来改变它的内容。索引和分片的赋值都是原地修改,它们对列表进行直接修改,而不是生成一个新的列表作为结果。
上面这些就是列表方法调用,简而言之,方法就是附属于特定对象的函数,方法提供特定类型的工具。上面的方法适用于列表。可能最常用的列表方法是 append,它能够简单地将一个单项加至列表末端。与合并不同的是,append 允许传入单一对象而不是列表。L.append(X) 与 L + [X] 的结果类似,不同的是,前者会原地修改 L,而后者会生成新的列表。另一个常见方法是 sort,它原地对列表进行排序。sort 是使用 Python 标准的比较检验作为默认值,而且以递增的顺序进行排序。我们可以通过传入关键字参数来修改排序行为——这是指定按名称传递的函数调用中特殊的 name = value 语法,常常用来给定配置选项。在排序中,key 参数给出了一个单个参数的函数,它返回在排序中使用的值,reverse 参数允许排序按照降序而不是升序进行。

注意
要当心 append 和 sort 原处修改相关的列表对象,而结果并没有返回列表。如果编辑类似 L = L.append(X) 的语句,将不会得到 L 修改后的值(实际上,会失去整个列表的引用);当使用 append 和 sort 之类的属性时,对象的修改有点像副作用,所以没有理由再重新赋值。
与字符串相同,列表有其他方法可执行其他特定的操作。例如,reverse 可原地反转列表,extend 和 pop 方法分别能够在末端插入多个元素、删除一个元素。也有一个 reversed 内置函数,像 sorted 一样地工作,但是,它必须包装在一个 list 调用中,因为它是一个迭代器。
在某些类型的应用程序中,往往会把这里用到的列表 pop 方法和 append 方法联用,来实现快速的后进先出堆栈结构。列表的末端作为堆栈的顶端,pop 方法也能够接受某一个即将删除并返回的元素的偏移,这一偏移是可选的。其他列表方法可以通过值删除某元素,在偏移处插入某元素,查找某元素的偏移等:
由于列表是可变的,你可以用 del 语句在原处删除某项或某片段:
关于列表的更多方法,请查阅相关手册或在 IDLE 上用 dir 查看列表有哪些的方法,然后再用 help 方法来查看其用法。


END









凡凡

Python笔记


    关注 凡凡Python笔记


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册