切片语义

  生活中切黄瓜、切萝卜、一本书的每一页等等都是符合切片的语义

  切片的语义是从某个东西中通过某种手段拿到某个整体的一部分

  切片是拿来主义,建立在已经有的序列上,有黄瓜才能切黄瓜

 列表 -> python中最典型的序列类型

  形式 [vaule, ...]

nums = [17, 71, 93, 69, 79, 14, 33, 7, 64, 58, 77, 75, 98, 61, 39, 50, 1, 69, 60, 20]
names = ["北门吹雪", "小一", "王五", "李四", "张三", "王二"]

那如何对其切片呢?

  [start:end:step]

  切片是建立在已有的列表上通过索引手段取得列表的一部分,计算机语言叫读取

  索引是下标访问,下标是一个整数,一个从0开始的递增的数,如 0 1 2 3 4 5 6 7 8 ...

def see_seq(iterable):
"""通过索引遍历序列,遍历序列的语义是依次读取序列中的每一个元素"""
# 序列开始的下标为 0,也就是索引为 0
# 序列第一个元素的下标是0,也就是第n个元素的下标为 n-1
# index 就是下标,从 0 到 序列最后一个元素索引 len(iterable) - 1
index = 0
while True:
# 通过索引读完索引对应的值 -> [i]
print(iterable[index]) # 每次读取完,则读取下一个,索引在原来基础上加一
index += 1 # 判断边界条件,也就是序列是否读完,读完则推出循环
# 序列的元素个数为 n = len(iterable), 那么最后一个元素的下标为 n-1
if len(iterable) - 1 == index:
break # 懂python的都知道for循环,for循环专用于序列的遍历
# 但for循环建立的基础语义有 迭代器 临时变量 可迭代对象 计数器,复杂难以理解
# 但for循环语句简洁
pass if __name__ == "__main__":
# 初始列表
nums = [17, 71, 93, 69, 79, 14, 33, 7, 64, 58, 77, 75, 98, 61, 39, 50, 1, 69, 60, 20]
names = ["北门吹雪", "小一", "王五", "李四", "张三", "王二"] # 调用函数,通过索引方式遍历序列
see_seq(nums)
see_seq(names)

  切片是建立在索引之上,通过从开始索引取到结束索引但不包括结束索引

  

[start:end:step]

  切片最重要的计算公式  -end < (start + 0... * step)  < end

  1. start 开始索引,省略则为0, start = 0

  2. end 结束索引,省略则为列表长度(列表中元素的个数), end = len(seqence)

  3. step 为步长,索引之间的间隔,等差数列

def get_slice(_list, start=None, end=None, step=None,):
"""模拟实现切片语义"""
# 省略开始值则为 0
if start is None:
start = 0
# 省略结束值则为其长度 len(_list)
if end is None:
end = len(_list)
# 省略步长,则步长为 1,阻止小朋友传入0步长
if step is None or step == 0:
step = 1 # 切片实现总要公式-end < (start + 0... * step) < end
# 保存结果列表
result = []
# 核心计数count,始终是从0开始自增1
count = 0
while True:
# 核心计算公式
list_index = start + count * step
# 通过核心公式计算出索引对列表取值
elem = _list[list_index] # 处理步长为正数情况,list_index 的值为 正数
if step > 0 and not (list_index < end):
break # 处理步长为负数情况, list_index 的值为 负数
if step < 0 and not(list_index > end):
break result.append(elem)
# 计数器自增1
count += 1 # 返回结果
return result if __name__ == "__main__":
# 初始列表
names = ["北门吹雪", "小一", "王五", "李四", "张三", "王二", "小明", "小爱", "小溪"] # python内置切片
slice_one = names[-1:-5:-1]
# 自定义切片语义的实现
slice_two = get_slice(names, -1, -5, -1) # 对比发现一致
print(slice_one)
print(slice_two)

亲,切片不难

附带for循环遍历序列的方式

for 循环的原理是

  1. 把序列变成一个迭代器,然后保存在一个内部临时变量中 temp_var = iter(iterable)
  2. 通过内置函数next()调用迭代器中的 __next__方法获取下一个数据 item = next(temp_var)
  3. 到了边界,迭代器会触发一个迭代器耗尽异常,for循环会自动捕获,终止for循环
def see_seq(iterable):
"""通过for循环遍历序列,遍历序列的语义是依次读取序列中的每一个元素"""
# 序列开始的下标为 0,也就是索引为 0
# 序列第一个元素的下标是0,也就是第n个元素的下标为 len(iterable) - 1 # for 循环自动处理索引、索引边界
# 自动依次取出 0 到 len(iterable)-1 索引对应的值
# 是不是很简洁?
for item in iterable:
print(item) # 打印分隔符
print("等价for语句".center(20, "-"))
# for 循环的原理是
# 1. 把序列变成一个迭代器,然后保存在一个内部临时变量中 temp_var = iter(iterable)
# 2. 通过内置函数next()调用迭代器中的 __next__方法获取下一个数据 item = next(temp_var)
# 3. 到了边界,迭代器会触发一个迭代器耗尽异常,for循环会自动捕获,终止for循环

# 等价语句
temp_var = iter(iterable) # 把序列变成一个迭代器
while True:
try:
item = next(temp_var) # next()调用迭代器
except StopIteration: # 迭代器耗尽异常,推出循环
break # 以上是for循环自动完成,这一行才是循环体
print(item) if __name__ == "__main__":
# 初始列表
nums = [17, 71, 93, 69, 79, 14, 33, 7, 64, 58, 77, 75, 98, 61, 39, 50, 1, 69, 60, 20]
names = ["北门吹雪", "小一", "王五", "李四", "张三", "王二"] # 调用函数,通过索引方式遍历序列
see_seq(nums)
see_seq(names)

  

												

大话Python切片,助你彻底掌控切片小妖精的更多相关文章

  1. Streamr助你掌控自己的数据

    博客说明 所有刊发内容均可转载但是需要注明出处. 项目简介 Streamr 致力于为世界实时数据的自由公平交换打造开源平台,并促进全球数据经济的发展.Streamr项目基于区块链技术,并向用户提供数据 ...

  2. 4星|《行为设计学:掌控关键决策》:影响决策质量的四大思维陷阱及WRAP应对法

    行为设计学:掌控关键决策 两位作者认为,有四大思维陷阱让人做出错误的决策:思维狭隘.证实倾向.短期情绪.过度自信.两位作者提出WRAP决策流程来应对:Widen your options(拓宽选择空间 ...

  3. 全面认识 RUST -- 掌控未来的雷电

    文章目录 RUST 简介 如何衡量语言的好坏? 静态语言 编译器 语言定位 代表性项目 Hello World RUST 前景 RUST 简介 Rust 是一种兼顾内存安全.高并发和稳定运行的编程语言 ...

  4. ACM对时间掌控力和日积月累的习惯的意义

    马云说,要想创业成功,不是要知道现在什么东西最火,而是要清楚的知道十年以后什么东西最火.这就意味着,你对时间掌控力,至少要有十年. 但是仔细回想一下自己的学生时代,自己对时间的把握是怎样的?有些人只能 ...

  5. IQ一个人的智力和对科学知识的理解掌握程度。 EQ对环境和个人情绪的掌控和对团队关系的运作能力。 AQ挫折商 一个人面对困境时减除自己的压力、渡过难关的能力。

    IQ: Intelligence Quotient 智商 一个人的智力和对科学知识的理解掌握程度. EQ: Emotional Quotient 情商 一个人对环境和个人情绪的掌控和对团队关系的运作能 ...

  6. CIO需加强对战略管理层面的掌控-精华篇

    当代CIO面临提升信息化作用的新机遇.CIO在企业中,不能满足于职能性的技术支撑角色,要找到新的着力点,以发挥信息化在全局战略中的作用,把信息化力量聚焦于做强做优,提高国际竞争力上来,成为企业不可或缺 ...

  7. Javascript通过bind()掌控this

    Javascript通过bind()掌控this: http://blog.csdn.net/rznice/article/details/26134201 bind能为我们做些什么,同时它的好处在哪 ...

  8. TED:如何掌控你的自由时间以及让自己变得更好,这样就能看到爱情应有的样子

    TED:如何掌控你的自由时间以及让自己变得更好,这样就能看到爱情应有的样子 一.<如何掌控你的自由时间> (1)时间管理的传统思维:守时和节省零散的时间.演讲者认为这个观点已经彻底落后. ...

  9. 【linux】【root权限的掌控】

    前言: 喜欢玩linux的都知道root权限是一个很重要的东西.因为linux里面万物皆文件,对于权限的掌控也就达到了一个前所未有的限制(不然随便一个用户rm -rf /*不就全完了,,哈哈). 下面 ...

随机推荐

  1. 推荐一款万能抓包神器:Fiddler Everywhere

    搞IT技术的同行,相信没有几个人是不会抓包这项技能的(如果很不幸你中枪了,那希望这篇文章给你一些动力),市面上的抓包工具也有很多,常用的有:Charles.Fiddler.Burpsuite.Wire ...

  2. IntelliJ IDEA下git版本回退,版本还原

    原文链接:https://blog.csdn.net/hehyyoulan/article/details/80005272

  3. 常被问到的八个 Java 面试题

    想要找到一份好的工作,面试是少不了的,可能你觉得自己技术应该不错了,但是面试却是一团糟.下面我收集了八个常常被问到的Java面试题.   1. 阐述 Java 7 和 Java 8 的区别. 实话说, ...

  4. 基于Rust-vmm实现Kubernetes运行时

    随着容器及K8s的广泛使用,越来越多的容器安全与隔离问题被暴露出来,如:容器逃逸.水平攻击.DDos攻击等严重威胁了办公和生产环境的安全与稳定,影响了业务的正常运行.安全容器技术孕育而生,产生了kat ...

  5. e3mall商城的归纳总结1之项目的架构

    首先来谈谈e3mall商城,e3mall商城是黑马推出一个学习的项目,前身是淘淘商城.两个用的技术差不多.,但由于后期加了一些新技术,更名为e3mall商城.本商城为分布式商城,主要用到的技术使mav ...

  6. 使用JS制作小游戏贪吃蛇

    先看效果图: 过程如下: 1.首先创建一张画布地图<div class="map"> </div>: 2.创建食物的自调用函数 (function (){ ...

  7. 初学WebGL引擎-BabylonJS:第6篇-碰撞交错与挑选

    [playground]-collisions(碰撞) 先贴官方源码(机器翻译版本) var createScene = function () { var scene = new BABYLON.S ...

  8. Go测试开发(一) 怎么写Go代码

    安装过程略过,网上搜一大把. 介绍 本文会在一个module中开发一个简单的Go package. 同时介绍go tool(也就是go命令行). 以及如何fetch,build和install Go的 ...

  9. java初探(1)之登录终探

    上一章讲了表单验证,数据验证和加密.这一章,将研究服务器和数据库的交互过程. 后端服务器有两种主流的形式,SQL数据库和NOSQL数据库.其中MYSQL属于SQL数据库,REDIS属于非SQL数据库. ...

  10. 异步(async)编程

    思考:为什么要使用异步编程? 我们先看看同步方法和异步方法之前在程序中执行的逻辑: 1. 同步方法 static void Main(string[] args) { Console.WriteLin ...