[英]Fastest Way in Python to Parse Space-delimited Numbers
因此,我在循環中將要運行數百萬次的代碼中苦苦掙扎。 我想知道(在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%。這里是否還有其他選項可能會更快? 也許與團體正則表達式? 在這里,性能確實是最重要的,所以我願意使用(內嵌良好的注釋)可讀性不高的東西。
如果我對您的理解正確, 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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.