说明:
切片操作符在python中的原型是
[start:stop:step]
即:[开始索引:结束索引:步长值]
开始索引:同其它语言一样,从0开始。序列从左向右方向中,第一个值的索引为0,最后一个为-1
结束索引:切片操作符将取到该索引为止,不包含该索引的值。
步长值:默认是一个接着一个切取,如果为2,则表示进行隔一取一操作。步长值为正时表示从左向右取,如果为负,则表示从右向左取。步长值不能为0
li = [1,2,3,4,5,6,7]print li[1:] #输出[2,3,4,5,6,7],省略终止索引,表示取起始索引之后的所有值,等效于li[1:len(li)]
print li[:3] #输出[1,2,3],省略起始索引,表示从0开始取,等效于li[0:3]
print li[:] #输出[1,2,3,4,5,6,7],省略起始索引、终止索引、步长值表示取全部,等效于li[0:len(li):1]
print li[::] #输出[1,2,3,4,5,6,7],省略起始索引、终止索引、步长值表示取全部,等效于li[0:len(li):1]
print li[::-1] #输出[7,6,5,4,3,2,1],省略起始索引、终止索引,步长值为-1,表示反向获取
原文链接:http://blog.sina.com.cn/s/blog_6d802e7b0100oy01.html
1.切片:
一"片"元素.起始索引和结束索引都是可选的, 如果没有提供或者用None 作为索引值,切片操作
会从序列的最开始处开始,或者直到序列的最末尾结束。
>>> s
'abcdfg'
>>> s[1]
'b'
>>> s[3]
'd'
>>> s[1:3]
'bc'
>>> s[3:5]
'df'
>>> s[4:7]
'fg'
>>> s[:]
'abcdfg'
>>> s[]
File "<stdin>", line 1
s[]
^
SyntaxError: invalid syntax
>>> s[:7]
'abcdfg'
>>> s[0]
'a'
>>> s[0:7]
'abcdfg'
>>> s[4:]
'fg'
>>> s[-100:100]
'abcdfg'
2. 切片与range()函数联合使用
>>> s[1]
'b'
>>> s[3]
'd'
>>> s[1:3]
'bc'
>>> s[3:5]
'df'
>>> s[4:7]
'fg'
>>> s[:]
'abcdfg'
>>> s[]
SyntaxError: invalid syntax
>>> s[:7]
'abcdfg'
>>> s[0]
'a'
>>> s[0:7]
'abcdfg'
>>> s[4:]
'fg'
>>> s[-100:100]
'abcdfg'
位于最后的一个字符砍掉,下面是实现这个要求的一种方法:
>>> s = 'abcde'
>>> i = -1
>>> for i in range(-1, -len(s), -1):
... print s[:i]
... abcd
abc
ab
a
>>> i = -1
>>> for i in range(-1, -len(s), -1):
... print s[:i]
... abcd
abc
ab
a
环之前加入一个额外的print 语句呢?我们该如何定义一个索引,来代表整个的序列呢?事实
上在个以负数作为索引的例子里是没有一个真正能解决这个问题的方法的,因为-1 已经是“最
小”的索引了.我们不可能用0 来作为索引值,因为这会切片到第一个元素之前而什么都不会显
示:
>>> s[:0]
''
''
如说,在你想用一个变量作为索引来从第一个到遍历最后一个元素的时候:
>>> s = 'abcde'
>>> for i in [None] + range(-1, -len(s), -1):
... print s[:i]
...
abcde
abcd
abc
ab
a
>>> for i in [None] + range(-1, -len(s), -1):
... print s[:i]
...
abcde
abcd
abc
ab
a
>>> s='abcde'
>>> for i in range(len(s),0,-1):
... print s[:i]
...
abcde
abcd
abc
ab
a
>>> for i in range(len(s),0,-1):
...
...
abcde
abcd
abc
ab
a