首页 > 编程语言 >01-列表操作-使用slice()命名切片,增强程序可读及可维护性,兼使用indices()方法,防止出现序列访问异常

01-列表操作-使用slice()命名切片,增强程序可读及可维护性,兼使用indices()方法,防止出现序列访问异常

时间:2024-03-13 13:01:44浏览次数:19  
标签:01 stop 可维护性 切片 start step slice indices

程序中的切片,使用原始的索引访问时,如果数量过多,时间久了,就会导致难以阅读和维护。但使用slice()函数,创建【命名切片】后,赋予了切片与现实相近的名称,让程序更容易理解。

同时,slice类中的indices方法,返回start,stop,step,3个值组成的元组。

并且indices()对3个值进行自动调整,确保其在规定的序列长度以内。

因此,使用它们,对序列进行检索时,可以避免出现IndexError异常。

一、slice()的定义和命名切片 

1、slice()定义

class slice(stop)

class slice(startstopstep=None)

start:起始值,可省略。省略时,从头开始

stop:结束值,必须有

step:步长,不可为0,可不写

返回一个slice对象,可以用在任意代表切片的地方

示例:

lst = [0, 1, 2, 3, 4]
s = slice(1, 4)
lst[s] # [1, 2, 3]
lst[1:4] # [1, 2, 3]

 2、命名切片(重要!!!)

刚刚的s可以用在任意需要使用切片的地方,s就是一个命名切片。

具体示例(列表中名字后面加了数字,是为更方便阅读):

# 比如:下面有个12名学生的总表,需要对他们进行分组。

# 1、3、5...为第1组,
# 2、4、6...为第2组

# 直接用[0:11:2]或者[1:11:2]
# 写程序,在后期进行维护的时候,
# 就不知道是什么意思
# 用命名切片就行了

stu_all = ['lili0','mike1','john2','steve3','jungle4','tina5','cici6','esless7','alibird8','sky9','tutu10','new11']

group1 = slice(0,12,2)
group2 = slice(1,12,2)

print(stu_all[group1])
print(stu_all[group2])

程序运行后,返回:

['lili0', 'john2', 'jungle4', 'cici6', 'alibird8', 'tutu10']
['mike1', 'steve3', 'tina5', 'esless7', 'sky9', 'new11'] 

这样在后期维护的过程中,就更容易读懂和维护了。

二、slice对象的indices(length)方法

返回一个包含3个元素的【元组】,分别代表start,stop,step,常见的写法如下:

# 生成slice类:s,
# start,stop,step值是5,12,2

s = slice(5,12,2) 
start,stop,step = s.indices(len(ord_lst))

说明 :

1、length是一个整数,一般是一个序列的长度

2、s是一个已经赋值了的切片类

3、如果s中的start,stop,step值在length范围内,则将s的3个值,作为indices()的返回值

4、如果s中的start>length,则start和stop都将赋值为length(也就是切片初始值超出了拟检索序列的范围)

5、如果使用[-5:-1]的形式,反向访问序列,经过indices()后,会返回“从前向后”序列的实际值

三、使用“命名切片”和indices方法检索数据

常见写法如下:

for i in range(*s.indices(len('1234567876876982736'))):
print(s[i])

注意*s.indices(),是对元组(start,stop,step)进行解包,当作range()的参数

这篇文章涉及另外2个扩展知识点:

1、*、**有啥区别,arg/*args/**kwargs呢?

2、python中的序列赋值规则

如果有兴趣,就给我留言吧。哈哈,我也是查了很多资料才搞明白滴

标签:01,stop,可维护性,切片,start,step,slice,indices
From: https://blog.csdn.net/2301_80452984/article/details/136526723

相关文章

  • 01-deque类-双端队列-完全解读
    1 deque类的适用场景1.1适用场景deque并非列表的完美替代,一般情况下,它最适用于:1.1 左入右出,或者,右入左出的数据结构。    只通过对其两端数据的操作,实现压入和弹出。比如:简单的堆栈1.2 创建有限长度的数据集,对近期有限事务或类似数据池的追踪记录。比如:日......
  • npm启动vue项目报错error:0308010C:digital envelope routines::unsupported的解决办
    错误截图解决方法package.json文件中修改dev项为setNODE_OPTIONS=--openssl-legacy-provider&vue-cli-serviceserve:"scripts":{"dev":"setNODE_OPTIONS=--openssl-legacy-provider&vue-cli-serviceserve","build:prod......
  • KTH1601与无线蓝牙耳机:让音乐与科技无缝连接
    在数字时代,无线蓝牙耳机因其便捷和高质的音质成为了音乐爱好者的首选。而随着技术的不断进步,现在的无线蓝牙耳机不仅仅是一个简单的音频播放设备,它还能通过智能感应技术,实现更为人性化的操作体验。 苹果AirPods耳机的创新翻盖触发设计, 堪称工业设计经典(图片来源苹果......
  • 01-Ajax&Axios
    AjaxAsynchronousJavascriptAndXml传统的请求方式:URL地址栏超链接form表单通过JS代码window.open(url)document.location.href=urlwindow.location.href=url缺陷:页面全部刷新,用户体验较差用户体验不连贯概述Ajax可以在浏览器中发送......
  • 代码随想录算法训练营day21 | leetcode 530. 二叉搜索树的最小绝对差、501. 二叉搜索
    目录题目链接:530.二叉搜索树的最小绝对差-简单题目链接:501.二叉搜索树中的众数-简单题目链接:236.二叉树的最近公共祖先-中等题目链接:530.二叉搜索树的最小绝对差-简单题目描述:给你一个二叉搜索树的根节点root,返回树中任意两不同节点值之间的最小差值。差值是一个正数,......
  • [js error] SyntaxError: Unexpected token ‘{‘ (at uniFile.js?t=1710138723630:1:
    问题详情问题描述封装一个函数的时候报错问题原因SyntaxError:Unexpectedtoken‘{’(atuniFile.js?t=1710138723630:1:34)SyntaxError:意外的令牌“{”(在uniFile.js?t=1710138723630:1:34)意思是有不符合语法规范的地方在第一行34个字符的地方去到报错文件的地方查......
  • 「AGC019B」 Reverse and Compare
    题意给定一个长度为\(n\)小写英文字母组成的字符串\(s\)。可以任意选定\(1\lex\ley\len\),把\(s_x\)到\(s_y\)之间的字符翻转。求最终不同字符串的方案数。分析我们先考虑所有字符都不同的情况。小学奥数的加法原理告诉我们,每一位都不同的字符串,对于第\(i\)位,可......
  • 01-Java程序基础
    标识符与变量标识符标识符可以标志:类名,方法名,接口名,常量名命名规则:只能由字母,数字,下划线,$组成不能以数字开头关键字不能做标识符标识符严格区分大小写例如:classHelloWorld{}classhelloWorld{}这两个类是完全不同的类,但如果用javac编译这个文件仅......
  • 01Python基础
    Python基础按照约定俗成的惯例,应该始终坚持使用4个空格的缩进。Python程序是大小写敏感的,如果写错了大小写,程序会报错。数据类型和变量数据类型整数任意大小的整数,包括负整数,和数学上的写法一致。十六进制,用0x前缀和0-9,a-f表示对于很大的数,100000000,可以写成100_00......
  • docker_01
    项目演示https://gitee.com/pear-admin/pear-admin-flask#项目2-pycharm打开-安装依赖pipinstall-rrequirements.txt-打开models,创建数据库注释掉解开注释-在命令行中运行-在命令中执行:pythonmanage.pyrunserver-打......