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