Python中切片(Slicing)的运用(:运算符)

总结: 1,对切片赋值,相当于替代原list中的切片部分,赋值的list不必与切片长度一致,也可以将切片赋值给新的变量,用以取原list中的一部分; 2,list中的元素在切片中可以用正数索引或负数索引表示,正向索引为0,1,2……,第一个元素索引为0;负向索引-1,-2,-3,……最后一个元素索引-1; 3,可以指定间隔进行切片。

局限: 只能对连续段或固定间隔的元素进行切片,无法对多段元素进行提取。我会在后面的博客中探讨对列中更复杂的切割合并问题。

切片Slicing是python非常有用的一个功能,用运算符:实现,这个运算符很强大,有时候也有一点复杂,我简单梳理一下作为入门者的一些参考。

当你需要一个序列的子串的时候,你就可以使用切片操作。例如:

a = [a,b,c,d,e,f,g]
在a这个序列中,如果你想截取里面[c,d,e]这个子序列,那么你就可以使用切片a[2:5]
它的语法形式是a[start:end],这里有一个区间边沿取值的问题。首先你要明确序列的索引是从0开始的,a[2:5]取值的范围是[2,5),前面是闭区间,后面是开区间,也就是2<=索引值<5这段区间里的元素。所以如果这样来切的话:a[1:1],得到的就是[],空序列。

索引也可以为负,从后往前依次是-1,-2,-3,……

nums = range(5)    # 建立一个从0-5的list
print nums         # 打印出 "[0, 1, 2, 3, 4]"
print nums[2:4]    # 得到索引从2(包括)到4(不包括)的切片; 打印 "[2, 3]"
print nums[2:]     # 得到索引从2(包括)以后的切片;打印 "[2, 3, 4]"
print nums[:2]     # 得到索引从开始到2(不包括)的切片;打印 "[0, 1]"
print nums[:]      # 得到所有元素的切片,相当于啥也没做; 打印["0, 1, 2, 3, 4]"
print nums[:-1]    # 索引可以为负,这里得到从开始到索引为-1(最后一个元素,不包括); 打印["0, 1, 2, 3]"
nums[2:4] = [8, 9] # 对索引从2(包括)到4(不包括)的元素赋值,可以理解为用等号右边的替代切片
print nums         # Prints "[0, 1, 8, 9, 4]"

对切片赋值长度不等于切片长度时,依然可以复制,切片部分被赋值部分完全替代。

>>> a = [a,b,c,d,e,f,g]
>>> a[2:5] = [1,2]
>>> print a
[a, b, 1, 2, f, g]
>>> a = [a,b,c,d,e,f,g]
>>> a[2:5] = [1,2,3,4]
>>> print a
[a, b, 1, 2, 3, 4, f, g]
不仅能通过赋值改变原list的元素和长度,还可以将原list的切片赋值给新的list:
>>>a = [a,b,c,d,e,f,g]
>>>b = a[2:7]
>>>print b
[c, d, e, f, g]

指定间隔提取切片,下面以间隔3为例,即在切片范围内每3个元素取一个:

>>>a = [a,b,c,d,e,f,g,h,i,j,k]
>>>b = a[2:9:3]
>>>print b
[c, f, i]

索引为负数时,可以产生相同的结果:

>>>a = [a,b,c,d,e,f,g,h,i,j,k]
>>>b = a[-9:-2:3]
>>>print b
经验分享 程序员 微信小程序 职场和发展