Python-序列切片原理和切片协议-[start:end:step] __getitem__
切片原理图(顾头不顾尾的正则原理)

# [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__协议就可切片,如果想在切片上再切片则需要返回一个对象,通过重新构建对象
Python-序列切片原理和切片协议-[start:end:step] __getitem__的更多相关文章
- python序列(五)切片操作
功能:截取列表中的任何部分. 切片适用于列表.元组.字符串.range对象等类型.. 格式:[::]切片使用两个冒号分隔的3个数字来完成. 第一个数字表示切片开始位置(默认为0). 第二个数字表示切片 ...
- Python 序列的修改、散列和切片
Vector类:用户定义的序列类型 我们将使用组合模式实现 Vector 类,而不使用继承.向量的分量存储在浮点数数组中,而且还将实现不可变扁平序列所需的方法. p.p1 { margin: 0.0p ...
- python序列的修改、散列和切片
新Vector类 接原vector类定义的新Vector类,原向量类是二维,现定义多维向量类: from array import array import reprlib import math c ...
- Python序列切片的注意事项
a=[1,2,3,4,5,6,7,8,9,10] 1)普通切片,形如array[m:n],只包含起始索引m,和不被包含在结果内的终点索引n, 注意终点索引可以大于序列的大小(长度),若终点索引大于序列 ...
- Python array,list,dataframe索引切片操作 2016年07月19日——智浪文档
array,list,dataframe索引切片操作 2016年07月19日——智浪文档 list,一维,二维array,datafrme,loc.iloc.ix的简单探讨 Numpy数组的索引和切片 ...
- python的高级特性:切片,迭代,列表生成式,生成器,迭代器
python的高级特性:切片,迭代,列表生成式,生成器,迭代器 #演示切片 k="abcdefghijklmnopqrstuvwxyz" #取前5个元素 k[0:5] k[:5] ...
- Python基础知识--Slice(切片)和Comprehensions(生成式)
最近在Youtube的Python视频教程上学习Python相关的基础知识,视频由Corey Schafer制作,讲得十分简单明了,英文发音也比较清晰,几乎都能听懂,是一个不错的Python入门学习的 ...
- golang slice 切片原理
golang 中的 slice 非常强大,让数组操作非常方便高效.在开发中不定长度表示的数组全部都是 slice .但是很多同学对 slice 的模糊认识,造成认为golang中的数组是引用类型,结果 ...
- python网络编程01 /C/S架构|B/S架构、网络通信原理、五层协议、七层协议简述、端口映射技术
python网络编程01 /C/S架构|B/S架构.网络通信原理.五层协议.七层协议简述.端口映射技术 目录 python网络编程01 /C/S架构|B/S架构.网络通信原理.五层协议.七层协议简述. ...
随机推荐
- promise和async await的区别
在项目中第一次遇到async await的这种异步写法,来搞懂它 项目场景 :点击登录按钮后执行的事件,先进行表单校验 this.$refs.loginFormRef.validate(element ...
- JavaSE基础--part1
Java特性和优势 简单.面向对象.可移植性.高性能.分布式.动态性.多线程.安全性.健壮性 Java的三大版本 JavaSE 标准版(应用于桌面程序,控制台开发) JavaME 嵌入式开发(手机,小 ...
- Linux两台服务器mysql数据库同步
我们在做web系统部署的时候往往涉及到两台甚至多台数据库的备份,为了数据安全考虑(虽然说到底不过是一堆0 1,但是价值千金啊),所以我们还是乖乖做同步把! 1.准备两台Linux服务器(主.从) 2. ...
- Vue基础(一)---- 模板语法
1.基本理解 Vue其实是一个渐进式JavaScript框架,封装好了一些方法,不再需要操作通过操作DOM,在相同的目标下能够更快的编写代码. 声明式渲染→组件系统→客户端路由→集中式状态管理→项目构 ...
- Qt QString转char[]数组
Qt QString转char[]数组 QString s1="1234456";char str[20]={0};strcpy(str,s1.toStdString().c_st ...
- 手写@Service、@Autowired、@Transactional注解,实现spring ioc和spring事务
自定义@Service注解 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface Custom ...
- python习题 随机密码生成 + 连续质数计算
随机密码生成 描述 补充编程模板中代码,完成如下功能: ...
- JVM基于栈的解释器执行原理
通过下面这段代码来解释JVM基于栈的执行原理 4. public static int add(int a, int b) { 5. int c = 0; 6. c = a + b; 7. retur ...
- [BUUOJ记录] [BJDCTF 2nd]old-hack & Schrödinger & elementmaster
三道比较简单的的题放一起一写,old-hack是ThinkPHP框架的一个nday,Schrödinger和elementmaster没啥考点,就是脑洞 一.old-hack 进入题目没发现什么Hi ...
- fabric1.4 网络操作
建立第一个网络 进入对应目录 $ cd fabric-samples/first-network 在first-network目录下有两个自动化脚本byfn.sh和eyfn.sh, 这两个脚本的启动顺 ...