本文实例讲述了Python对切片命名清除索引的方法。分享给大家供大家参考,具体如下:
问题:如何清理掉到处都是硬编码的切片索引
解决方案:对切片命名
假设有一些代码用来从字符串的固定位置中取出具体的数据(比如从一个平面文件或类似的格式:平面文件flat file是一种包含没有相对关系结构的记录文件):
1
2
3
|
########0123456789012345678901234567890123456789012345678901234567890123456789
record = '....................100.......513.25..........'
cost = int (record[ 20 : 23 ]) * float (record[ 30 : 36 ])
|
与其这样做,倒不如对切片进行命名:避免了使用许多神秘难懂的硬编码索引,代码变得清晰许多。
1
2
3
|
SHARES = slice ( 20 , 23 ) #对切片命名
PRICE = slice ( 30 , 36 ) #对切片命名
cost = int (record[SHARES]) * float (record[PRICE])
|
一般来说,内置的slice()函数会创建一个切片对象,可以用在任何允许进行切片操作的地方。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
>>> 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.start
、s.stop
以及s.step
属性来得到关于该对象的信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
>>> 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异常)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
>>> 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程序设计有所帮助。
原文链接:http://www.cnblogs.com/apple2016/p/5746817.html