一、Python切片实例
下面以字符串对象 str1
为例进行切片操作.
#!/usr/bin/env python3
# encoding:utf-8
str1 = '0123456789'
print('str1:', str1)
print('\n正序...')
print('{} {:<12s} {:<12s} {:<12s} {:<12s}'.format(
'i', 'str1[i:]', 'str1[:i]', 'str1[-i:]', 'str1[:-i]'))
for i in range(len(str1)):
result = '{} {:<12s} {:<12s} {:<12s} {:<12s}'.format(
i, str1[i:], str1[:i], str1[-i:], str1[:-i])
print(result)
print('\n逆序...')
print('{} {:<12s} {:<12s} {:<12s} {:<12s} {:<12s} {:<12s}'.format(
'i', 'str1[i::-1]', 'str1[:i:-1]', 'str1[-i::-1]', 'str1[:-i:-1]', 'str1[i:4:-1]', 'str1[0:i:-1]'))
for i in range(len(str1)):
result = '{} {:<12s} {:<12s} {:<12s} {:<12s} {:<12s} {:<12s}'.format(
i, str1[i::-1], str1[:i:-1], str1[-i::-1], str1[:-i:-1], str1[i:4:-1], str1[0:i:-1])
print(result)
'''
str1: 0123456789
正序...
i str1[i:] str1[:i] str1[-i:] str1[:-i]
0 0123456789 0123456789
1 123456789 0 9 012345678
2 23456789 01 89 01234567
3 3456789 012 789 0123456
4 456789 0123 6789 012345
5 56789 01234 56789 01234
6 6789 012345 456789 0123
7 789 0123456 3456789 012
8 89 01234567 23456789 01
9 9 012345678 123456789 0
逆序...
i str1[i::-1] str1[:i:-1] str1[-i::-1] str1[:-i:-1] str1[i:4:-1] str1[0:i:-1]
0 0 987654321 0 987654321
1 10 98765432 9876543210
2 210 9876543 876543210 9
3 3210 987654 76543210 98
4 43210 98765 6543210 987
5 543210 9876 543210 9876 5
6 6543210 987 43210 98765 65
7 76543210 98 3210 987654 765
8 876543210 9 210 9876543 8765
9 9876543210 10 98765432 98765
'''
二、Python两套索引
三、切片理解
1. 切片基本逻辑
str1[start:stop:step]
- 序列索引从左往右以0开始,从右往左以-1开始,-0等于0.
- 切片结果不包含stop索引对应的值.
- 切片逻辑: 从start开始,以step为步长,到stop(不含)为止,step正负表截取的方向,正向右,负向左.
2. 正、逆序不同之处
- 正序:
str1[start=0 : stop=len(str) : step=1]
⚠️ 注意默认参数
- 执行理解: step为正时,从start开始,以step为步长,到stop(不含)为止,从左往右截取.
- 3个参数都有默认值,步长step不能为0,三个参数可正可负.
- start元素的逻辑位置需在stop元素逻辑位置的左边,否则返回空列表.
- start 与 stop 位置与切片结果的关系:
- 逆序:
str1[start=-1 : stop=-len(str)-1 : step=-n]
⚠️ 注意默认参数
- 执行理解: step为负时,从start开始,以step为步长,到stop(不含)为止,从右往左截取.
- 前2个参数有默认值,实参可正可负,步长step不能为-0.
- start元素的逻辑位置需在stop元素逻辑位置的右边,否则返回空列表.
- start 与 stop 位置与切片结果的关系:
四、深层原理
(下面以列表 list 为例)
获取元素: 调用 list.__getitem__(i)
方法,相当于 list[]
.
切片操作: 调用 list.__getitem__(slice(start, stop[, step]))
方法,相当于 list[start:stop:step]
.
注:slice, 切片类.
附:slice类
>>> help(slice) Help on class slice in module builtins: class slice(object) | slice(stop) | slice(start, stop[, step]) | | Create a slice object. This is used for extended slicing (e.g. a[0:10:2]).
©2021 CherryChenNan
点赞支持,收藏学习,关注不迷路~