पर खोज और प्रतिस्थापित करने के लिए सबसे तेज़ पायथन विधि मैं एक बहुत बड़ी स्ट्रिंग के अंदर बड़ी संख्या में उप-तारों को प्रतिस्थापित करने का सबसे तेज़ तरीका ढूंढ रहा हूं। यहां दो उदाहरण दिए गए हैं जिनका मैंने उपयोग किया है।एक बड़ी स्ट्रिंग
findall() सरल और अधिक सुरुचिपूर्ण लगता है, लेकिन इसमें एक आश्चर्यजनक समय लगता है।
खोजक() एक बड़ी फ़ाइल के माध्यम से ब्लेज़, लेकिन मुझे यकीन नहीं है कि यह करने का यह सही तरीका है।
यहां कुछ नमूना कोड है। ध्यान दें कि जिस वास्तविक पाठ में मुझे रूचि है, वह लगभग 10 एमबी आकार में एक स्ट्रिंग है, और इन दो तरीकों में एक बड़ा अंतर है।
import re
def findall_replace(text, reg, rep):
for match in reg.findall(text):
output = text.replace(match, rep)
return output
def finditer_replace(text, reg, rep):
cursor_pos = 0
output = ''
for match in reg.finditer(text):
output += "".join([text[cursor_pos:match.start(1)], rep])
cursor_pos = match.end(1)
output += "".join([text[cursor_pos:]])
return output
reg = re.compile(r'(dog)')
rep = 'cat'
text = 'dog cat dog cat dog cat'
finditer_replace(text, reg, rep)
findall_replace(text, reg, rep)
अद्यतन जोड़ा गया re.sub परीक्षण के लिए विधि:
def sub_replace(reg, rep, text):
output = re.sub(reg, rep, text)
return output
परिणाम
re.sub() - 0: 00: ००.०३१०००
finditer() - 0 : 00: 00.10 9 000
findall() - 0: 01: 17.260000
और दूसरा एक वास्तव में बहुत तेजी से है? मुझे अजीब लग रहा है, उन्हें लगभग लेना चाहिए। उसी समय। और मुझे लगता है कि दोनों तरीके सही हैं। –
आप पुनः उप विधि का उपयोग क्यों नहीं कर रहे हैं? –
स्ट्रिंग के साथ + = का उपयोग एक ओ (एन^2) ऑपरेशन है, ओ (एन) की सूची बनाने और जुड़ने के लिए "" की तुलना में। –