Python——切片

来源:互联网 发布:遥感数据销售 编辑:程序博客网 时间:2024/05/22 17:43

python中的 str、tuple、list能用[start:end:step]的形式快速取得所需要的值。

[start,end) 左开右闭 ,例如,[1,2]实际只取第二个元素

需要注意的是,列表切片产生的是列表的副本,与原列表不是同一份空间。

start默认为0,end不填则取值至最后

list=range(100)list[2:10] #结果[2, 3, 4, 5, 6, 7, 8, 9](0,1,2,3,4,5)[:3] #结果(0, 1, 2) 'abcdefg'[4:6] # 结果'ef'

step表示取值间隔

[0,1,2,3,4,5,6,7,8,9][:10:2] #隔两个数取一个元素[0, 2, 4, 6, 8]

start,end的为负数时,-1指倒数第一个元素,-2为倒数第二个

list=range(100)list[-10:] #倒数第十个至最后 [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]list[:-80] # 开始至倒数-80个 [0,1,...,19]

step为负值时从右往左取值,start表示的位置应该在end的右边

此时start默认为-1,end默认为0

[0,1,2,3,4,5,6,7,8,9][:-10:-2]  #step为负,从右往左取元素[9, 7, 5, 3, 1] start为-1,[0,1,2,3,4,5,6,7,8,9][5:9:-2]   #[] start为在end的左边,返回空的list[0,1,2,3,4,5,6,7,8,9][9:5:-1]  # [9, 8, 7, 6][0,1,2,3,4,5,6,7,8,9][5::-1]    # [5, 4, 3, 2, 1, 0]

经典运用,翻转字符串

'abcdef'[::-1] #倒转  'fedcba'

扩展:赋值,删除

list的切片,内部是调用getitemsetitem,delitem和slice函数。而slice函数又是和range()函数相关的。

给切片传递的键是一个特殊的slice对象。该对象拥有可描述所请求切片方位的属性,例如:

>>> list2=[0,1,2,3,4,5,6,7,8,9]>>> list2[1:3]=['a','a']  >>> list2[0, 'a', 'a', 3, 4, 5, 6, 7, 8, 9]>>> list2[1:0]=['b','b'] #这里的end的值小于start时表示在插入,不覆盖>>> list2                #在第二个元素(下标1)前插入[0, 'b', 'b', 'a', 'a', 3, 4, 5, 6, 7, 8, 9]>>> del list2[3:5]>>> list2[0, 'a', 'a', 5, 6, 7, 8, 9]
a = [ 1, 2, 3, 4, 5, 6 ]x = a [ 1 : 5 ]  # x = a.__getitem__( slice ( 1, 5, None ) )a [ 1 : 3 ] = [10, 11, 12 ] # a.__setitem__( slice ( 1, 3, None ), [ 10, 11, 12 ] )del a [ 1 : 4 ]  # a.__delitem__( slice ( 1, 4, None ) )