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 24 Python
flask中使用蓝图将路由分开写在不同文件实例解析
Jan 19 Python
python抓取文件夹的所有文件
Feb 27 Python
python如何把嵌套列表转变成普通列表
Mar 20 Python
从django的中间件直接返回请求的方法
May 30 Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 Python
python sqlite的Row对象操作示例
Sep 11 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
Jun 02 Python
pytorch SENet实现案例
Jun 24 Python
Django执行源生mysql语句实现过程解析
Nov 12 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
Jan 27 Python
python推导式的使用方法实例
Feb 28 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
php+ajax实现无刷新分页的方法
2014/11/04 PHP
PHP实现的简单缓存类
2015/07/29 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
CI框架附属类用法分析
2018/12/26 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
动态表格Table类的实现
2009/08/26 Javascript
jQuery toggleClass应用实例(附效果图)
2014/04/06 Javascript
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
2015/08/17 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
js实现内置计时器
2019/12/16 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
Python中运行并行任务技巧
2015/02/26 Python
判断网页编码的方法python版
2016/08/12 Python
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
python判断输入日期为第几天的实例
2018/11/13 Python
django 外键model的互相读取方法
2018/12/15 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
印度网上购物首选目的地:Flipkart
2016/08/01 全球购物
施华洛世奇巴西官网:SWAROVSKI巴西
2019/12/03 全球购物
宣传策划类求职信范文
2014/01/31 职场文书
合同协议书格式
2014/04/18 职场文书
企业法人代表证明书
2014/09/27 职场文书
经营场所证明范本
2015/06/19 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
php中pcntl_fork详解
2021/04/01 PHP
python b站视频下载的五种版本
2021/05/27 Python
vue-cli4.5.x快速搭建项目
2021/05/30 Vue.js
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技