slice(切片)是Python中一个非常有特色的特性。在正式开始之前,我们先来回顾一下关于切片的知识。切片主要用在序列对象中,根据索引范围提取索引的内容。切片的写入格式:[i:i+n:m];其中,i为切片的起始索引值,当它在列表中的第一个时可以省略;i+n是切片的结束位置,当它在链表的最后时可以省略;m可以不提供,默认值为1,不允许为0,当m为负数时,列表将被反转。切片的基本含义是:从序列的第i个索引开始,一直到最后n位元素,按m个区间过滤。下面是一些有代表性的例子,基本涵盖了切片语法的要点:li=[1,4,5,6,7,9,11,14,16]#下面的表达式可以表示整个列表,其中X>=len(li)li[0:X]==li[0:]==li[:X]==li[:]==li[::]==li[-X:X]==li[-X:]li[1:5]==[4,5,6,7]#从1开始,取5-1个元素li[1:5:2]==[4,6]#从1开始,取5-1位元素,按2个区间过滤li[-1:]==[16]#取倒数第一个元素li[-4:-2]==[9,11]#从倒数第四个开始,取-2-(-4)=2个元素li[:-2]==li[-len(li):-2]==[1,4,5,6,7,9,11]#开始从头开始,取-2-(-len(li))=7个元素#当步长为负数时,先翻转list,然后截取li[::-1]==[16,14,11,9,7,6,5,4,1]#翻转整个列表li[::-2]==[16,11,7,5,1]#翻转整个列表,然后过滤li[:-5:-1]==[16,14,11,9]#翻转整个列表,取-5-(-len(li))=4个元素li[:-5:-3]==[16,9]#翻转整个列表,取-5-(-len(li))=4个元素,然后n按3个区间过滤#切片的步长不能为0li[::0]#报错(ValueError:切片步长不能为零)C/C++、Java、JavaScript等语言,虽然它们也支持一些“切片”功能,例如截取数组或字符串的片段,它们在语法层面上没有普遍支持。根据维基百科,Fortran是第一个支持切片语法的语言(1966年),Python是最具代表性的语言之一。各大编程语言对切片的支持此外,像Perl、Ruby、Go、Rust等语言,虽然也有切片,但不如Python灵活自由(因为支持步进、负索引、默认索引).切片语法在编程语言中的基本用法可以满足大部分需求。不过Python切片也有一些高级用法,比如:切片占位符用法(可以实现列表的赋值、删除和拼接)、自定义对象实现切片函数、迭代器切片(itertools.islice())、文件对象切片、etc.切片的介绍和复习就到这里了。进入文章标题:为什么Python的切片语法不会导致索引越界?当我们基于单个索引取值时,如果索引越界,就会报错:“IndexError:listindexoutofrange”。>>>li=[1,2]>>>li[5]Traceback(最近调用最后):文件“
