python切片原理_Python-序列切片原理和切片协议-[start:end:step] __getitem__

本文详细介绍了Python切片的原理,包括正则切片方法、可变数据类型的操作技巧,如数据添加、修改和删除。同时探讨了如何通过`__getitem__`方法实现切片协议,并通过实例展示了 BeiMenChuiXue 类的切片使用。涵盖了切片在序列操作中的关键用法和协议实现。
摘要由CSDN通过智能技术生成

切片原理图(顾头不顾尾的正则原理)

d4cdfe4b6c14f912a556dff71f77819aa85.png

# [0:1] 其实只取到C, 取e则 [-1:], 如果步长为负数则倒过来取,从第几个往回取

name = "ChuiXue"

print(name[0:1])

print(name[-1:])

print(name[::-1])

对于可变数据类型,则可以通过切片实现数据添加修改, 如添加数据、替换数据、删除元素

number = [1, 2, 3]

# 修改第一个数据, 直接把对象依次传递进去

number[:1] = [5, 6]

print(number)

# 结果是 [5, 6, 2, 3]

# 某个位置插入元素, stat = end, 等价于 +=

number[0:0] = [1.1, 2.4]

print(number)

# 替换切片选中的数据, start != end

number[1:2] = [3.3, 4.4]

print(number)

# 等步长替换

number[::2] = ['北门吹雪', 'beimenchuixue', 'QiNiuYun', "JinRiTouTiao"]

print(number)

# 删除数据

del number[1:2]

print(number)

切片协议  __getitem__

类中实现这个方法,那么这个类实例的对象就可以进行切片操作

from numbers import Integral

class BeiMenChuiXue:

def __init__(self, names):

self.names = names

def __getitem__(self, item):

if isinstance(item, Integral):

return self.names[item]

else:

# 返回对象依旧尅再进行切片

return self.__class__(self.names[item])

if __name__ == '__main__':

names = ["北门吹雪", "QiNiuYun", "JinRiTouTiao", "AliYun", "TengXun"]

bei_men_chui_xue = BeiMenChuiXue(names)

new_names = bei_men_chui_xue[:]

print(new_names[1])

# 再次切片

print(new_names[:3][1])

经验:

1. 切片不仅仅可以获取序列的子序列,还可以进行可变序列的添加、修改、删除等操作

2. 对对象可切片,遵守 __getitem__协议就可切片,如果想在切片上再切片则需要返回一个对象,通过重新构建对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值