本文實例講述了Python對切片命名清除索引的方法。分享給大家供大家參考,具體如下:
問題:如何清理掉到處都是硬編碼的切片索引
解決方案:對切片命名
假設有一些代碼用來從字符串的固定位置中取出具體的數據(比如從一個平面文件或類似的格式:平面文件flat file是一種包含沒有相對關系結構的記錄文件):
########0123456789012345678901234567890123456789012345678901234567890123456789record='....................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)>>> aslice(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.start、s.stop以及s.step屬性來得到關于該對象的信息。
>>> items=[0,1,2,3,4,5,6]>>> a=slice(2,4)>>> aslice(2, 4, None)>>> a.start2>>> a.stop4>>> a.step>>> b=slice(1,5,2)>>> bslice(1, 5, 2)>>> b.start1>>> b.stop5>>> b.step2>>>
另外,可以通過使用indices(size)方法將切片映射到特定大小的序列上。這會返回一個(start,stop,step)元組,所有的值都已經恰當地限制在邊界以內(當做索引操作時可避免出現IndexError異常)
>>> items=[0,1,2,3,4,5,6]>>> a=slice(2,4)>>> aslice(2, 4, None)>>> a.start2>>> a.stop4>>> a.step>>> b=slice(1,5,2)>>> bslice(1, 5, 2)>>> b.start1>>> b.stop5>>> b.step2>>> 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])ll>>> for i in range(*b.indices(len(s))): print(s[i])el>>> c=slice(0,8,2)>>> cslice(0, 8, 2)>>> for i in range(*c.indices(len(s))): print(s[i])Hloo>>>
(代碼摘自《Python Cookbook》)
更多關于Python相關內容感興趣的讀者可查看本站專題:《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總》
新聞熱點
疑難解答