Python切片操作是Python中从列表,字符串等某个序列对象中抽取部分值的情况下使用的方法,首先我们要知道序列对象包括哪些类型。

 

序列:字符、列表、元组   

   

  所有序列都支持迭代,序列表示索引为非负整数的有序对象集合,字符和元组属于不可变序列,列表可变。

 

Python切片操作的一般方式

一个完整的切片表达式包含两个“:”,用于分隔三个参数(start_index、end_index、step),当只有一个“:”时,默认第三个参数step=1。

 

切片操作基本表达式:object[start_index:end_index:step]

 

python 不适用切片 对字符串进行切片 python什么数据类型不能切片_取值

 

step:正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以增量1取值。“切取方向非常重要!

 

start_index:表示起始索引(包含该索引本身);该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定,step为正从“起点”开始,为负从“终点”开始。

 

end_index:表示终止索引(不包含该索引本身);该参数省略时,表示一直取到数据“端点”,至于是到“起点”还是到“终点”,同样由step参数的正负决定,step为正时直到“终点”,为负时直到“起点”。

 

 

下面说下实际的使用案例,以列表为例子:

 

list_slice=['alex','peter','leo','simon']

取单个书

print(list_slice[0])

['alex']

 

 

取整个列表

print(list_slice[::])

['alex', 'peter', 'leo', 'simon']

 

取前三个元素

 

print(list_slice[0:3])  ##start_index从0开始,左包右不包,就是0,1,2 不包括3

print(list_slice[-4:-1:1])

['alex', 'peter', 'leo']

 

倒序取数

print(list_slice[0:3:-1]) ##start_index, end_index是0-3,是说从左向右取,但是step=-1是从右到左取,相互矛盾

[]

 

print(list_slice[::-1]) ##倒序整个list
print(list_slice[3::-1])  ##倒序整个list

['simon', 'leo', 'peter', 'alex']

 

print(list_slice[3:0:-1]) ##取后三个元素 start_index=3, end_index=0(但是不包括),左包右不包

print(list_slice[-1:-4:-1]) ##取后三个元素, start_index, end_index可以用负号来表示元素

['simon', 'leo', 'peter']

 

连续切片

print(list_slice[0:4][0:2]) ##理论上可以无数次切片

['alex', 'peter']

 

嵌套列表的切片

list_list_slice=['alex','peter',['a','b','c'],'leo','simon']

print(list_list_slice[2][0:2])

['a', 'b']

 

切片的三个参数可以用表达式,如

a[2+1:3*2:7%3]

[3, 4, 5]

 

等价于 a[2+1:3*2:7%3] = a[3:6:1]

 

切片range的案例

for i in range(1,100)[2::3][-10:]: 

       print(i)

就是利用range函数生成1-99的整数,然后取3的倍数,再取最后十个。

 

用切片来修改list

list_slice[0:2] =['x','y']
print(list_slice)['x', 'y', 'leo', 'simon']
 
 
list_slice[0] =['x','y']
print(list_slice)
[['x', 'y'], 'y', 'leo', 'simon']

 

字符串,元组的切片操作和列表类似

 

(一)start_index、end_index、step可同为正、同为负,也可正负混合使用。但必须遵循一个原则,否则无法正确切取到数据:当start_index的位置在end_index的左边时,表示从左往右取值,此时step必须是正数(同样表示从左往右);当start_index的位置在end_index的右边时,表示从右往左取值,此时step必须是负数(同样表示从右往左),即两者的取值顺序必须是相同的。对于特殊情况,当start_index或end_index省略时,起始索引和终止索引由step的正负来决定,不会存在取值方向出现矛盾的情况(即不会返回空列表[]),但正和负取到的结果是完全不同的,因为一个向左一个向右。

(二)在利用切片时,step的正负是必须要考虑的,尤其是当step省略时。比如a[-1:],很容易就误认为是从“终点”开始一直取到“起点”,即a[-1:]= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],但实际上a[-1:]=a[-1]=9,原因在于step=1表示从左往右取值,而起始索引start_index=-1本身就是对象的最右边的元素了,再往右已经没数据了,因此只有a[-1]一个元素。