Python切片一文读懂: Python 切片操作的深层理解_详细图解

文章目录

        • 一、Python切片实例
        • 二、Python两套索引
        • 三、切片理解
          • 1. 切片基本逻辑
          • 2. 正、逆序不同之处
        • 四、深层原理

一、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两套索引

Python切片一文读懂: Python 切片操作的深层理解_详细图解_第1张图片

三、切片理解
1. 切片基本逻辑

str1[start:stop:step]

  • 序列索引从左往右以0开始,从右往左以-1开始,-0等于0.
  • 切片结果不包含stop索引对应的值.
  • 切片逻辑: 从start开始,以step为步长,到stop(不含)为止,step正负表截取的方向,正向右,负向左.
2. 正、逆序不同之处
  1. 正序:

str1[start=0 : stop=len(str) : step=1]

⚠️ 注意默认参数

  • 执行理解: step为正时,从start开始,以step为步长,到stop(不含)为止,从左往右截取.
  • 3个参数都有默认值,步长step不能为0,三个参数可正可负.
  • start元素的逻辑位置需在stop元素逻辑位置的左边,否则返回空列表.
  • start 与 stop 位置与切片结果的关系:
    Python切片一文读懂: Python 切片操作的深层理解_详细图解_第2张图片
  1. 逆序:

str1[start=-1 : stop=-len(str)-1 : step=-n]

⚠️ 注意默认参数

  • 执行理解: step为负时,从start开始,以step为步长,到stop(不含)为止,从右往左截取.
  • 前2个参数有默认值,实参可正可负,步长step不能为-0.
  • start元素的逻辑位置需在stop元素逻辑位置的右边,否则返回空列表.
  • start 与 stop 位置与切片结果的关系:

Python切片一文读懂: Python 切片操作的深层理解_详细图解_第3张图片

四、深层原理

(下面以列表 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
点赞支持,收藏学习,关注不迷路~

你可能感兴趣的:(OpenCV+Python,算法,python,算法,列表,元组,字符串)