下面以字符串对象 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 '''
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051' 二、Python两套索引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]). 12345678
©2021 CherryChenNan
点赞支持,收藏学习,关注不迷路~