Python中用于解析空格分隔数字的最快方法

时间:2016-03-11 15:24:56

标签: python regex

所以我在循环中遇到一些代码会遇到数百万次。我想知道哪种方式(在Python中)用数字解析空格分隔的固定宽度列的集合并将它们渲染为缩短的形式。我将循环遍历这样的数据:

entry = "1      0    0    7     1    1    2    3    4    5    6     0"

我基本上需要提取第5,第7,第8,第9和第10个标记,将数字转换为字符串标识符。

选项1 : 由于数据是固定宽度,我可以做类似的事情:

a,b,c,d,e = entry[28:33],entry[38:43],entry[43:48],entry[48:53],entry[53:59]

拉出数字(带空格),然后形成我的字符串:

return "c"+a.strip()+"x"+b.strip()+"e"+c.strip()+"s"+d.strip()+"n"+e.strip()

选项2 :先拆分:

fields = entry.split()
return "c"+fields[5]+"x"+fields[7]+"e"+fields[8]+"s"+fields[9]+"n"+fields[10]

对于一些测试,选项2的运行速度比选项1快5%。这里还有其他选项可以更快吗?也许是团体的正则表达式?性能在这里确实是至关重要的,所以我愿意(内联好评)使用不高的可读性。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,entry.split()会正常工作。这是拉出第5,第7,第8,第9和第10个索引以创建字符串标识符的示例。请注意,索引从0开始,因此数字为少的原因。

entry = "1      0    0    7     1    1    2    3    4    5    6     0"
elems = entry.split()

string_id = 'c' + str(elems[4]) + 'x' + str(elems[6]) + 'e' + str(elems[7]) + 's' + str(elems[8]) + 'n' + str(elems[9])  # 'c1x2e3s4n5'

print(string_id)  # '12345'

多次出场的最佳时间:0.00183889195728

从您的问题中执行选项1的最佳时间是:0.00139979653864

如果您提供了多个条目,我可以执行更好的性能测试,但是由于数据有限,这是目前可以做的最好的。如果您需要更快的速度(这些是非常小的性能差异),请不要使用Python。使用C.