Python中的列表切片非常灵活,要根据表象来分析它的内在机理,这样用起来才能溜。
一、切片实例
>>> str = "helloworld"
>>> print(str[0:3]) # 截取第一位到第三位
hel
>>> print(str[:]) # 截取全部,第一个参数默认为开头,第二个参数默认为最后
helloworld
>>> print(str[6:]) # 截取第七位到结尾
orld
>>> print(str[:-3]) # 截取第一位到倒数第三位
hellowo
>>> print(str[2]) # 截取第三个字符
l
>>> print(str[-1]) # 截取倒数第一个字符
d
>>> print(str[-4:-1]) # 截取倒数第四位到倒数第二位的字符
orl
>>> print(str[-3:]) # 截取倒数第三位到结尾
rld
>>> print(str[8:2:-2]) # 第三个参数表示截取间隔,负号表示逆序截取,第三个参数delta默认为1
loo
>>> print(str[::-1]) # 字符串逆序
dlrowolleh
>>> print(str[1:5:-1]) # 当第三个参数为负时,第一个参数的位置要在第二个参数的右边
# 这边输出为空
可见,列表的下标有三个参数:
第一个参数beg:起始下标
第二个参数end:终止下标
第三个参数delta:表示步长
- 当delta<0时,beg默认为len(array)-1,end默认为开头之前(和range一样,end位取不到)。注意:delta<0时,beg位表示的位置要在end位之后,因为delta<0时是从后往前倒过来处理列表
- 当delta>0时,beg默认为0,end默认为最末之后。
- 当delta未给出时默认为1,未给出即没有第二个冒号和其后的数字
记住倒数第一个元素的索引是-1
还需要注意的是,列表切片产生的是列表的副本,与原列表不是同一份空间。看下面示例
>>> x = [1,2,3]
>>> y = x[:]
>>> x[0] = -1
>>> print(y)
[1,2,3]
二、列表切片写操作
x[from:to]=[element1,element2,...]
- 当to<=from时,进行插入操作,即不对原列表进行替换,而是直接在from位置插入等号右边列表的元素
- 当to>from时,进行替换操作,即将原列表from到to-1位置的元素替换成等号右边列表的元素
>>> x = [1,2,3,4,5]
>>> x[2:1] = [100,200] #to<=from,在from位置插入等号右边列表的元素
>>> x
[1, 2, 100, 200, 3, 4, 5]
>>> del x[2:0] #对于切片del操作,如果to<=from,不执行任何操作
>>> x
[1, 2, 100, 200, 3, 4, 5]
>>> del x[2:2]
>>> x
[1, 2, 100, 200, 3, 4, 5]
>>> del x[2:4]
>>> x
[1, 2, 3, 4, 5]
>>> x[2:4] = None #应该用列表
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only assign an iterable
>>> x[2:4] = [None]
>>> x
[1, 2, None, 5]