zz:http://blog.csdn.net/hengyunabc/article/details/6540157
 
seq[start:stop:step]
start:同其它语言一样,从0开始。序列从左向右方向中,第一个值的索引为0,最后一个为-1
stop:切片操作符将取到该索引为止,注意:不包含该索引的值。
step:默认是一个接着一个切取,如果为2,则表示进行隔一取一操作。步长值为正时表示从左向右取,如果为负,则表示从右向左取。步长值不能为0
 
 
list的切片,内部是调用__getitem__,和slice函数。而slice函数又是和range()函数相关的。
range([start], stop[, step])
[start, start + step, start + 2 * step, ...]
真正让人迷惑的是list[start:stop:step]中的start和stop的默认值。
按《Python参考手册(第4版)》的说法:
    如果不指定start和stop具体值
    当step>0时,start和stop默认值是索引的开头
    当step<0时,start和stop默认值是索引的结尾
我仔细再想下,发现有点不妥,a[::-1]又怎样解释?
我觉得step的符号表示一种方向的含义:
+:即从左向右看,所以start默认是0,stop默认是索引最大值
- :即从右向左看,所以start默认是索引最大值,stop默认是0
若,start->stop 顺序和+(-)的方向相反,则为空
 
如:
a = [0,1,2,3,4,5,6,7,8,9]  
a[:5:-1]   #step < 0,所以start = 9  
a[0:5:-1]  #指定了start = 0  
a[1::-1]   #step < 0,所以stop = 0  
 
Python3代码:
l = list(range(10))  
print(l[5:0:-1])  
print(l[5:4:-1])  
print(l[:3:-1])  
print(l[0:3:-1])  
print(l[9::-1])  
输出:
 
[5, 4, 3, 2, 1]  
[5]  
[9, 8, 7, 6, 5, 4]  
[]  
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]