list切片
Python提供了切片(Slice)操作符“:”,简化取指定索引范围的操作。
L = ['Adam', 'Lisa', 'Bart', 'Paul']取前3个元素,用L[0:3]实现,表示从索引0开始取,直到索引3为止,但不包括索引3。
1 | L[0:3] # ['Adam', 'Lisa', 'Bart'] |
切片操作还可以指定第三个参数,第三个参数表示每N个元素取一个,上面的L[::2]会每两个元素取出一个来,也就是隔一个取一个。
1 | L[::2] # ['Adam', 'Bart'] |
把list换成tuple,切片操作完全相同,只是切片的结果也变成了tuple。
倒序切片
对于list,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,如下:
1 | L = ['Adam', 'Lisa', 'Bart', 'Paul'] |
倒数第一个元素的索引是-1。倒序切片包含起始索引,不包含结束索引。
字符串切片
字符串'xxx'和Unicode字符串u'xxx'(Python3不再需要u)也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:
1 | 'ABCDEFG'[:3] # 'ABC' |
在很多编程语言中,针对字符串提供了很多各种截取函数,其实目的就是对字符串切片。Python没有针对字符串的截取函数,只需要切片操作就可以完成。
说明:[begin_index, end_index, step]切片形式,不论step正负,切片是从begin_index开始,end_index结束(不包含end_index)。这在同时指定begin_index和end_index的情况下不会有任何疑问,然而,Python允许省略begin_index或者end_index一个或两个,这会产生一些问题。
当全部省略时,便是根据step全部切片;
当省略一个时,Python根据以下逻辑填充缺失索引:当step为正,正序切片,end_index大于begin_index;当step为负,倒序切片,end_index小于begin_index。
1 | s = [i for i in range(10)] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] |