Python cookbook(数据结构与算法)对切片命名清除索引的方法


Posted in Python onMarch 13, 2018

本文实例讲述了Python对切片命名清除索引的方法。分享给大家供大家参考,具体如下:

问题:如何清理掉到处都是硬编码的切片索引

解决方案:对切片命名

假设有一些代码用来从字符串的固定位置中取出具体的数据(比如从一个平面文件或类似的格式:平面文件flat file是一种包含没有相对关系结构的记录文件):

########0123456789012345678901234567890123456789012345678901234567890123456789
record='....................100.......513.25..........'
cost=int(record[20:23])*float(record[30:36])

与其这样做,倒不如对切片进行命名:避免了使用许多神秘难懂的硬编码索引,代码变得清晰许多。

SHARES=slice(20,23) #对切片命名
PRICE=slice(30,36) #对切片命名
cost=int(record[SHARES])*float(record[PRICE])

一般来说,内置的slice()函数会创建一个切片对象,可以用在任何允许进行切片操作的地方。

>>> items=[0,1,2,3,4,5,6]
>>> a=slice(2,4)
>>> a
slice(2, 4, None)
>>> items[a]
[2, 3]
>>> items[2:4]
[2, 3]
>>> items[a]=[77,88]
>>> items
[0, 1, 77, 88, 4, 5, 6]
>>> del items[a]
>>> items
[0, 1, 4, 5, 6]
>>>

如果有一个slice对象的实例s,可以分别通过s.starts.stop以及s.step属性来得到关于该对象的信息。

>>> items=[0,1,2,3,4,5,6]
>>> a=slice(2,4)
>>> a
slice(2, 4, None)
>>> a.start
2
>>> a.stop
4
>>> a.step
>>> b=slice(1,5,2)
>>> b
slice(1, 5, 2)
>>> b.start
1
>>> b.stop
5
>>> b.step
2
>>>

另外,可以通过使用indices(size)方法将切片映射到特定大小的序列上。这会返回一个(start,stop,step)元组,所有的值都已经恰当地限制在边界以内(当做索引操作时可避免出现IndexError异常)

>>> items=[0,1,2,3,4,5,6]
>>> a=slice(2,4)
>>> a
slice(2, 4, None)
>>> a.start
2
>>> a.stop
4
>>> a.step
>>> b=slice(1,5,2)
>>> b
slice(1, 5, 2)
>>> b.start
1
>>> b.stop
5
>>> b.step
2
>>> s='HelloWorld'
>>> a.indices(len(s))
(2, 4, 1)
>>> b.indices(len(s))
(1, 5, 2)
>>> items[a]
[2, 3]
>>> items[b]
[1, 3]
>>> for i in range(*a.indices(len(s))):
  print(s[i])
l
l
>>> for i in range(*b.indices(len(s))):
  print(s[i])
e
l
>>> c=slice(0,8,2)
>>> c
slice(0, 8, 2)
>>> for i in range(*c.indices(len(s))):
  print(s[i])
H
l
o
o
>>>

(代码摘自《Python Cookbook》)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python装饰器初探(推荐)
Jul 21 Python
Python如何获取系统iops示例代码
Sep 06 Python
Python 装饰器实现DRY(不重复代码)原则
Mar 05 Python
Flask模拟实现CSRF攻击的方法
Jul 24 Python
python用post访问restful服务接口的方法
Dec 07 Python
如何关掉pycharm中的python console(图解)
Oct 31 Python
Python collections.deque双边队列原理详解
Oct 05 Python
Python应用自动化部署工具Fabric原理及使用解析
Nov 30 Python
Python将QQ聊天记录生成词云的示例代码
Feb 10 Python
pytorch MSELoss计算平均的实现方法
May 12 Python
Python利用capstone实现反汇编
Apr 06 Python
Python数组变形的几种实现方法
May 30 Python
Django使用Celery异步任务队列的使用
Mar 13 #Python
特征脸(Eigenface)理论基础之PCA主成分分析法
Mar 13 #Python
python Celery定时任务的示例
Mar 13 #Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 #Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
Mar 13 #Python
Python+Django搭建自己的blog网站
Mar 13 #Python
python实现人脸识别经典算法(一) 特征脸法
Mar 13 #Python
You might like
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
使用jquery清空、复位整个输入域
2015/04/02 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
单击按钮发送验证码,出现倒计时的简单实例
2017/03/17 Javascript
微信小程序 选项卡的简单实例
2017/05/24 Javascript
vue.js删除列表中的一行
2018/06/30 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
javascript定时器的简单应用示例【控制方块移动】
2019/06/17 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
微信小程序反编译的实现
2020/12/10 Javascript
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
python万年历实现代码 含运行结果
2017/05/20 Python
python中pip的安装与使用教程
2018/08/10 Python
详解python数据结构和算法
2019/04/18 Python
介绍一款python类型检查工具pyright(推荐)
2019/07/03 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
Python中如何添加自定义模块
2020/06/09 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
2021/01/06 Python
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
CSS3中的常用选择器使用示例整理
2016/06/13 HTML / CSS
AJAX检测用户名是否存在的方法
2021/03/24 Javascript
货物运输服务质量承诺书
2014/05/29 职场文书
2014年维修电工工作总结
2014/11/20 职场文书
投标承诺函格式
2015/01/21 职场文书
民事辩护词范文
2015/05/21 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
观后感的写法
2015/06/19 职场文书
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js