列表实战——索引、切片和矩阵

未匹配的标注

因为列表是序列,索引和切片对列表和字符串都是一样的。然而,对列表进行索引的结果是在指定的偏移量处的对象类型,而对列表进行切片操作返回的总是一个新列表:

>>> 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 插件提供了处理矩阵的其它方式。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~