列表实战——索引、切片和矩阵 | 第二部分 类型与操作 —— 第 8 章: 列表和字典 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-大发黄金版app下载
因为列表是序列,索引和切片对列表和字符串都是一样的。然而,对列表进行索引的结果是在指定的偏移量处的对象类型,而对列表进行切片操作返回的总是一个新列表:
>>> l = ['spam', 'spam', 'spam!']
>>> l[2] # offsets start at zero
'spam!'
>>> l[−2] # negative: count from the right
'spam'
>>> l[1:] # slicing fetches sections
['spam', 'spam!']
这里注意一点:因为可以在列表中嵌入列表和其它对象类型,有时将需要把索引操作串起来以深入数据结构。比如,在python中表示矩阵(多维数组)最简单的方法之一是作为带有嵌套子列表的列表。下面是一个基本的 3 x 3 的基于列表的二维数组:
>>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
使用一个索引,得到一整行(其实,是一个嵌套子列表),使用两个索引,得到行中的一个项:
>>> matrix[1]
[4, 5, 6]
>>> matrix[1][1]
5
>>> matrix[2][0]
7
>>> matrix = [[1, 2, 3],
... [4, 5, 6],
... [7, 8, 9]]
>>> matrix[1][1]
5
注意在之前的交互中:如果想要的话列表能自然地占据多行,因为它们被一对方括号包含;这里的“...”是python的连续行提示符(参见第4章查看没有“...”的相比较的代码,在本书下一部分关注更多关于语法的知识)。
关于矩阵的更多知识,请参考本章稍后的基于字典的矩阵表示(当矩阵大部分为空时它可以更高效)。在第20章(在那里讲编写额外的矩阵代码)还将继续这个主线,特别是列表comprehensions。对于高性能的数字工作,在第4章和第5章中提到的 numpy 插件提供了处理矩阵的其它方式。