本文实例讲述了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