为了访问list、str等序列类型中某些元素所构成的子集,Python提供了一种简单的语法——切片。
切片语法
普通切片
切片操作的基本写法是somelist[start:end],取值范围[start,end),不包括end。
1 | a = list(range(10)) |
如果从开头获取切片,则可以不写start。
1 | a[:4] # [0, 1, 2, 3] |
同样地,如果切片要取到末尾,则可以不写end。
1 | a[4:] # [4, 5, 6, 7, 8, 9] |
如果start和end都被省略,则表示原对象的一份拷贝。
1 | a[:] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] |
在指定切片起止索引时,若要从尾部向前算,则可以使用负数来表示相关偏移量。
1 | a[:-1] # [0, 1, 2, 3, 4, 5, 6, 7, 8] |
对序列进行切片时,即使start或end索引越界也不会出问题。
1 | a[:20] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] |
对切片操作得到的新列表进行修改,不会影响原列表。
1 | 4] b = a[: |
带间隔的切片
除了基本的切片操作外,Python还提供了somelist[start:end:step]的写法,表示在[start,end)内,以step为间隔取值。
1 | a = list(range(10)) |
Python中有一种常见的技巧——以-1为间隔,来反转列表或者字符串等。
1 | a[::-1] # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] |
给切片赋值
如果把切片放在赋值语句的左边,会把序列中处在指定范围内的对象替换为新值。
切片的长度与新值的个数无需相等。序列会根据新值的个数相应地扩张或收缩。
1 | a = list(range(10)) |
如果把切片放在赋值语句的左边,那么右侧必须是个可迭代对象(即使只有单独一个值)。
注意下面的两种写法:
1 | a[2:5] = 100 # 错误的写法 |
第一种写法将会导致如下的错误:
1 | Traceback (most recent call last): |
将切片作为del操作的对象,可以删除序列中的元素。
1 | 10)) a = list(range( |