Python的索引详解
(2014-12-23 16:57:38)
标签:
元素代码步长序列示例 |
分类: Python |
索引 序列中的所有元素都是有编号的——从0开始递增。这些元素可以通过编号分别访问,如下例所示: 注意 字符串就是一个由字符组成的序列。索引0指向第1个元素,在这个例子中就是字母H。 这就是索引。可以通过索引获取元素。所有序列都可以通过这种方式进行索引。使用负数索引时,Python会从右边,也就是从最后1个元素开始计数。最后1个元素的位置编号是 1(不是 0,因为那会和第1个元素重合): |
字符串字面值(就此而言,其他序列字面量亦可)能够直接使用索引,而不需要一个变量引
用它们。两种做法的效果是一样的: 如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。例如,假设你只
对用户输入年份的第4个数字感兴趣,那么,可以进行如下操作: 代码清单2-1是一个示例程序,它要求输入年、月(1~12的数字)、日(1~31),然后打印
出相应日期的月份名称,等等。
用它们。两种做法的效果是一样的: 如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。例如,假设你只
对用户输入年份的第4个数字感兴趣,那么,可以进行如下操作: 代码清单2-1是一个示例程序,它要求输入年、月(1~12的数字)、日(1~31),然后打印
出相应日期的月份名称,等等。
分片
与使用索引来访问单个元素类似,可以使用分片操作来访问一定范围内的元素。分片通过冒
号相隔的两个索引来实现:
分片操作对于提取序列的一部分是很有用的。而编号在这里显得尤为重要。第1个索引是需
要提取部分的第1个元素的编号,而最后的索引则是分片之后剩下部分的第1个元素的编号。请参
见如下代码:
简而言之,分片操作的实现需要提供两个索引作为边界,第1个索引的元素是包含在分片内
的,而第2个则不包含在分片内。
与使用索引来访问单个元素类似,可以使用分片操作来访问一定范围内的元素。分片通过冒
号相隔的两个索引来实现:
分片操作对于提取序列的一部分是很有用的。而编号在这里显得尤为重要。第1个索引是需
要提取部分的第1个元素的编号,而最后的索引则是分片之后剩下部分的第1个元素的编号。请参
见如下代码:
简而言之,分片操作的实现需要提供两个索引作为边界,第1个索引的元素是包含在分片内
的,而第2个则不包含在分片内。
1. 优雅的捷径
假设需要访问最后3个元素(根据先前的例子),那么当然可以进行显式的操作: 现在,索引 10指向的是第11个元素——这个元素并不存在,却是在最后一个元素之后。明
白了吗?
现
在,这样的做法是可行的。但是,如果需要从列表的结尾开始计数呢? 看来并不能以这种方式访问最后的元素。那么使用索引0作为最后一步的下一步操作所使用
的元素,结果又会怎样呢? 这并不是我们所要的结果。实际上,只要分片中最左边的索引比它右边的晚出现在序列中(在
这个例子中是倒数第3个比第1个晚出现),结果就是一个空的序列。
假设需要访问最后3个元素(根据先前的例子),那么当然可以进行显式的操作: 现在,索引 10指向的是第11个元素——这个元素并不存在,却是在最后一个元素之后。明
白了吗?
现
在,这样的做法是可行的。但是,如果需要从列表的结尾开始计数呢? 看来并不能以这种方式访问最后的元素。那么使用索引0作为最后一步的下一步操作所使用
的元素,结果又会怎样呢? 这并不是我们所要的结果。实际上,只要分片中最左边的索引比它右边的晚出现在序列中(在
这个例子中是倒数第3个比第1个晚出现),结果就是一个空的序列。
幸好,可以使用一个捷径:
如果分片所得部分包括序列结尾的元素,那么,只需置空最后一个索引即可: 这种方法同样适用于序列开始的元素: 实际上,如果需要复制整个序列,可以将两个索引都置空: 代码清单2-2 是一个小程序, 它会提示输入URL ( 假设它的形式为http://www.somedomainname.com),然后提取域名。
如果分片所得部分包括序列结尾的元素,那么,只需置空最后一个索引即可: 这种方法同样适用于序列开始的元素: 实际上,如果需要复制整个序列,可以将两个索引都置空: 代码清单2-2 是一个小程序, 它会提示输入URL ( 假设它的形式为http://www.somedomainname.com),然后提取域名。