序列类型函数2—切片索引的扩展
2013-05-28 15:56
148 查看
有这么一个问题:有一个字符串,我们想通过一个循环按照这样的形式显示它:每次都把
位于最后的一个字符砍掉,下面是实现这个要求的一种方法:
>>> s = 'abcde'
>>> i = -1
>>> for i in range(-1, -len(s), -1):
... print s[:i]
... abcd
abc
ab
a
可是,该如何在第一次迭代的时候显示整个字符串呢?是否有一种方法可以不用在整个循环之前加入一个额外的print 语句呢?我们该如何定义一个索引,来代表整个的序列呢?事实上在个以负数作为索引的例子里是没有一个真正能解决这个问题的方法的,因为-1 已经是“最小”的索引了.我们不可能用0 来作为索引值,因为这会切片到第一个元素之前而什么都不会显示:
>>> s[:0]
''
我们的方案是使用另一个小技巧:用None 作为索引值,这样一来就可以满足你的需要,比如说,在你想用一个变量作为索引来从第一个到遍历最后一个元素的时候:
>>> s = 'abcde'
>>> for i in [None] + range(-1, -len(s), -1):
... print s[:i]
...
abcde
abcd
abc
ab
a
现在这个程序符合我们的要求了。在进行下面的内容之前,必须指出,似乎还可以先创建一个只包含None 的列表,然后用extend()函数把range()的输出添加到这个列表,或者先建立range()输出组成的列表然后再把None 插入到这个列表的最前面,然后对这个列表进行遍历,但是可变对象的内建函数extend()根本就没有返回值,所以这个方法是行不通的:
>>> for i in [None].extend(range(-1, -len(s), -1)):
... print s[:i]
...
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: iteration over non-sequence
这个错误发生的原因是[None].extend(...)函数返回None , None 既不是序列类型也不是可迭代对象. 这种情况下使用上面提到的的列表连接操作来实现是唯一不需要添加额外代码的方法.
当然不用上述方法如此麻烦,正的索引可以到len(s)可以采用以下方法:
>>> s='abcde'
>>> for j in range(len(s),0,-1):
... print s[:j]
...
abcde
abcd
abc
ab
a
位于最后的一个字符砍掉,下面是实现这个要求的一种方法:
>>> s = 'abcde'
>>> i = -1
>>> for i in range(-1, -len(s), -1):
... print s[:i]
... abcd
abc
ab
a
可是,该如何在第一次迭代的时候显示整个字符串呢?是否有一种方法可以不用在整个循环之前加入一个额外的print 语句呢?我们该如何定义一个索引,来代表整个的序列呢?事实上在个以负数作为索引的例子里是没有一个真正能解决这个问题的方法的,因为-1 已经是“最小”的索引了.我们不可能用0 来作为索引值,因为这会切片到第一个元素之前而什么都不会显示:
>>> s[:0]
''
我们的方案是使用另一个小技巧:用None 作为索引值,这样一来就可以满足你的需要,比如说,在你想用一个变量作为索引来从第一个到遍历最后一个元素的时候:
>>> s = 'abcde'
>>> for i in [None] + range(-1, -len(s), -1):
... print s[:i]
...
abcde
abcd
abc
ab
a
现在这个程序符合我们的要求了。在进行下面的内容之前,必须指出,似乎还可以先创建一个只包含None 的列表,然后用extend()函数把range()的输出添加到这个列表,或者先建立range()输出组成的列表然后再把None 插入到这个列表的最前面,然后对这个列表进行遍历,但是可变对象的内建函数extend()根本就没有返回值,所以这个方法是行不通的:
>>> for i in [None].extend(range(-1, -len(s), -1)):
... print s[:i]
...
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: iteration over non-sequence
这个错误发生的原因是[None].extend(...)函数返回None , None 既不是序列类型也不是可迭代对象. 这种情况下使用上面提到的的列表连接操作来实现是唯一不需要添加额外代码的方法.
当然不用上述方法如此麻烦,正的索引可以到len(s)可以采用以下方法:
>>> s='abcde'
>>> for j in range(len(s),0,-1):
... print s[:j]
...
abcde
abcd
abc
ab
a
相关文章推荐
- 【php数组函数序列】之ksort()- 对数组的元素键名进行升序排序,保持索引关系
- ASP.NETC#通用扩展函数之TypeParse 类型转换方便多了
- ASP.NET AJAX 说明文档->客户端引用->全局命名空间->JavaScript 基础类型扩展->Array 类型扩展->contains 函数
- 不支持包含 Clr 类型“ConcatString”的扩展函数参数或返回值。
- python 序列类型可用的内建函数
- SQL中一些不经意隐式类型转换或者函数使用导致索引失效问题
- PHP变量与类型扩展之数组及数组函数大全
- R实战:【基本类型】可扩展时间序列类型xts(Extensible Time Series)
- PHP - Manual手册 - Function Reference函数参考 - Variable and Type Related Extensions变量和类型相关扩展 - Variable handling变量操作 - Variable handl
- php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
- Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)
- PHP学习之八:扩展函数库之基本类型与变量的扩展
- php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
- JavaScript string 字符串类型的扩展函数
- str() 字符串的常用函数『移除空白 分割 长度 索引 切片』
- 有一个整数数组,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,也就是说,找出符合条件的最短序列。 给定一个int数组A和数组的大小n,请
- Python字符串类型(创建、索引、切片、成员操作符、重复、连接、计算长度、内置方法)
- 序列类型函数
- php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系