它的语法形式是a[start:end],这里有一个区间边沿取值的问题。首先你要明确序列的索引是从0开始的,a[2:5]取值的范围是[25),前面是闭区间,后面是开区间,也就是2<=索引值<5这段区间里的元素。所以如果这样来切的话:a[1:1],得到的就是[],空序列。试问在序列a中,哪里有元素的索引是既>=1又<1的呢?

那么它的修改就会反馈到原来的序列当中,你可以尝试一下:

print a

你对切片进行赋值已经反映到源序列当中。但是,如果我不赋值三个元素,我赋值两个,或者四个,那会发生什么情况呢?

看看下面的代码:

答案显而易见,就算你赋值元素个数和原来切片出来元素的个数不一样,它所反映到源序列的都是['c''d''e']这个子序列被改变。

如果你把一个空序列赋值给切片对象a[2:5] = [],那么反映到序列中的就是2<=索引<5的元素被删除了。和上面一样,再来看看代码,算是作为结束:

我还想说说几种切片的方法,因为它们实在太有趣了。

我想换个字符串来测试,不要再abcd,1234的了。就用segmentfault.com吧!

要注意区间的选取。-16<=索引值<-4

除此之外,我还可以在'segmentfault'中每隔两个字符地将截取到的字符组成序列。试试:

在这里的3被称作步进值,步进切片的语法形式就是:seq[start:end:step],在start<=索引值= 1)。

所以a[-4:-16:-3]的意思就是:反方向从-16<=索引值<-4的元素中,隔两个元素来截取。

所以当你想要把这个序列反转的时候,你就可以从反方向截取所有元素a[::-1]。

通过这几种方法切片出来的对象,你都可以进行赋值,具体的你就自己尝试一下吧!

其实还有一种切片方式,叫缩略切片,因为我对它不是很了解,所以不打算写了。如果你有兴趣可以google一下。

总结一下:

注意是从哪边开始!

这样看还是挺混乱的,关键还是多练!

Ps:时间很紧,下午还要考试,可能会有错误。所以还是以官方文档和书本的为准吧。我的python版本是2.7.3。