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

  

  # [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__的更多相关文章

  1. python序列(五)切片操作

    功能:截取列表中的任何部分. 切片适用于列表.元组.字符串.range对象等类型.. 格式:[::]切片使用两个冒号分隔的3个数字来完成. 第一个数字表示切片开始位置(默认为0). 第二个数字表示切片 ...

  2. Python 序列的修改、散列和切片

    Vector类:用户定义的序列类型 我们将使用组合模式实现 Vector 类,而不使用继承.向量的分量存储在浮点数数组中,而且还将实现不可变扁平序列所需的方法. p.p1 { margin: 0.0p ...

  3. python序列的修改、散列和切片

    新Vector类 接原vector类定义的新Vector类,原向量类是二维,现定义多维向量类: from array import array import reprlib import math c ...

  4. Python序列切片的注意事项

    a=[1,2,3,4,5,6,7,8,9,10] 1)普通切片,形如array[m:n],只包含起始索引m,和不被包含在结果内的终点索引n, 注意终点索引可以大于序列的大小(长度),若终点索引大于序列 ...

  5. Python array,list,dataframe索引切片操作 2016年07月19日——智浪文档

    array,list,dataframe索引切片操作 2016年07月19日——智浪文档 list,一维,二维array,datafrme,loc.iloc.ix的简单探讨 Numpy数组的索引和切片 ...

  6. python的高级特性:切片,迭代,列表生成式,生成器,迭代器

    python的高级特性:切片,迭代,列表生成式,生成器,迭代器 #演示切片 k="abcdefghijklmnopqrstuvwxyz" #取前5个元素 k[0:5] k[:5] ...

  7. Python基础知识--Slice(切片)和Comprehensions(生成式)

    最近在Youtube的Python视频教程上学习Python相关的基础知识,视频由Corey Schafer制作,讲得十分简单明了,英文发音也比较清晰,几乎都能听懂,是一个不错的Python入门学习的 ...

  8. golang slice 切片原理

    golang 中的 slice 非常强大,让数组操作非常方便高效.在开发中不定长度表示的数组全部都是 slice .但是很多同学对 slice 的模糊认识,造成认为golang中的数组是引用类型,结果 ...

  9. python网络编程01 /C/S架构|B/S架构、网络通信原理、五层协议、七层协议简述、端口映射技术

    python网络编程01 /C/S架构|B/S架构.网络通信原理.五层协议.七层协议简述.端口映射技术 目录 python网络编程01 /C/S架构|B/S架构.网络通信原理.五层协议.七层协议简述. ...

随机推荐

  1. promise和async await的区别

    在项目中第一次遇到async await的这种异步写法,来搞懂它 项目场景 :点击登录按钮后执行的事件,先进行表单校验 this.$refs.loginFormRef.validate(element ...

  2. JavaSE基础--part1

    Java特性和优势 简单.面向对象.可移植性.高性能.分布式.动态性.多线程.安全性.健壮性 Java的三大版本 JavaSE 标准版(应用于桌面程序,控制台开发) JavaME 嵌入式开发(手机,小 ...

  3. Linux两台服务器mysql数据库同步

    我们在做web系统部署的时候往往涉及到两台甚至多台数据库的备份,为了数据安全考虑(虽然说到底不过是一堆0 1,但是价值千金啊),所以我们还是乖乖做同步把! 1.准备两台Linux服务器(主.从) 2. ...

  4. Vue基础(一)---- 模板语法

    1.基本理解 Vue其实是一个渐进式JavaScript框架,封装好了一些方法,不再需要操作通过操作DOM,在相同的目标下能够更快的编写代码. 声明式渲染→组件系统→客户端路由→集中式状态管理→项目构 ...

  5. Qt QString转char[]数组

    Qt QString转char[]数组 QString s1="1234456";char str[20]={0};strcpy(str,s1.toStdString().c_st ...

  6. 手写@Service、@Autowired、@Transactional注解,实现spring ioc和spring事务

    自定义@Service注解 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface Custom ...

  7. python习题 随机密码生成 + 连续质数计算

    随机密码生成 描述 补充编程模板中代码,完成如下功能:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪ ...

  8. JVM基于栈的解释器执行原理

    通过下面这段代码来解释JVM基于栈的执行原理 4. public static int add(int a, int b) { 5. int c = 0; 6. c = a + b; 7. retur ...

  9. [BUUOJ记录] [BJDCTF 2nd]old-hack & Schrödinger & elementmaster

    三道比较简单的的题放一起一写,old-hack是ThinkPHP框架的一个nday,Schrödinger和elementmaster没啥考点,就是脑洞 一.old-hack 进入题目没发现什么Hi ...

  10. fabric1.4 网络操作

    建立第一个网络 进入对应目录 $ cd fabric-samples/first-network 在first-network目录下有两个自动化脚本byfn.sh和eyfn.sh, 这两个脚本的启动顺 ...