0%

Python切片操作

list切片

Python提供了切片(Slice)操作符“:”,简化取指定索引范围的操作。
L = ['Adam', 'Lisa', 'Bart', 'Paul']取前3个元素,用L[0:3]实现,表示从索引0开始取,直到索引3为止,但不包括索引3

1
2
3
4
5
6
7
L[0:3]  # ['Adam', 'Lisa', 'Bart']
# 如果第一个索引是0,可以省略
L[:3] # ['Adam', 'Lisa', 'Bart']
# 也可以从索引1开始,取出2个元素出来
L[1:3] # ['Lisa', 'Bart']
# 只用一个“:”,表示从头到尾取出所有元素,L[:]实际上复制出了一个新list
L[:] # ['Adam', 'Lisa', 'Bart', 'Paul']

切片操作还可以指定第三个参数,第三个参数表示每N个元素取一个,上面的L[::2]会每两个元素取出一个来,也就是隔一个取一个。

1
L[::2]  # ['Adam', 'Bart']

把list换成tuple,切片操作完全相同,只是切片的结果也变成了tuple。

倒序切片

对于list,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,如下:

1
2
3
4
5
L = ['Adam', 'Lisa', 'Bart', 'Paul']
L[-2:] # ['Bart', 'Paul']
L[:-2] # ['Adam', 'Lisa']
L[-3:-1] # ['Lisa', 'Bart']
L[-4:-1:2] # ['Adam', 'Bart']

倒数第一个元素的索引是-1。倒序切片包含起始索引,不包含结束索引

字符串切片

字符串'xxx'和Unicode字符串u'xxx'(Python3不再需要u)也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:

1
2
3
'ABCDEFG'[:3]  # 'ABC'
'ABCDEFG'[-3:] # 'EFG'
'ABCDEFG'[::2] # 'ACEG'

在很多编程语言中,针对字符串提供了很多各种截取函数,其实目的就是对字符串切片。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
2
3
4
5
s = [i for i in range(10)]  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(s[2::-1]) # 默认填充end_index= 0,结果为[2, 1, 0]
print(s[:6:-1]) # 默认填充end_index= 9,结果为[9, 8, 7](不包括s[6])
print(s[2:0:-1]) # [2, 1](不包括s[0])
print(s[9:6:-1]) # [9, 8, 7]
天生我材必有用,千金散尽还复来~
  • 本文作者: XTLei
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
-------------本文结束感谢您的阅读-------------