स्ट्रिंग स्ट्रिंग के लिए स्ट्रिंग को जोड़ने का सबसे अच्छा तरीका उपयोग +
या है +=
। ऐसा इसलिए है क्योंकि यह पठनीय और तेज है। वे भी उतनी ही तेजी से हैं, जो आप चुनते हैं वह स्वाद का मामला है, बाद वाला सबसे आम है। यहाँ timeit
मॉड्यूल के साथ समय हैं :
a = a + b:
0.11338996887207031
a += b:
0.11040496826171875
हालांकि, जो लोग सूचियों को रखने और उनके लिए अपील करने और फिर उन सूचियों में शामिल होने की सलाह देते हैं, वे ऐसा इसलिए करते हैं क्योंकि किसी स्ट्रिंग को सूची में शामिल करना संभवतः एक स्ट्रिंग का विस्तार करने की तुलना में बहुत तेज़ है। और यह सच हो सकता है, कुछ मामलों में। यहाँ, उदाहरण के लिए, एक वर्ण स्ट्रिंग के एक मिलियन एपेंड हैं, पहले एक स्ट्रिंग के लिए, फिर एक सूची में:
a += b:
0.10780501365661621
a.append(b):
0.1123361587524414
ठीक है, पता चला है कि जब भी परिणामस्वरूप स्ट्रिंग एक लाख वर्ण लंबा होता है, तब भी संलग्न करना तेज था।
अब एक हज़ार वर्ण लंबे स्ट्रिंग को सौ हज़ार बार जोड़कर देखते हैं:
a += b:
0.41823482513427734
a.append(b):
0.010656118392944336
इसलिए, अंत स्ट्रिंग, लगभग 100 एमबी लंबी हो जाती है। यह बहुत धीमा था, एक सूची में जोड़ना बहुत तेज था। उस समय में अंतिम शामिल नहीं है a.join()
। तो कितना समय लगेगा?
a.join(a):
0.43739795684814453
Oups। इस मामले में भी मुड़ता है, परिशिष्ट / शामिल धीमी है।
तो यह सिफारिश कहां से आती है? अजगर 2?
a += b:
0.165287017822
a.append(b):
0.0132720470428
a.join(a):
0.114929914474
ठीक है, संलग्न / join है मामूली तेजी वहाँ अगर आप बहुत देर तक तार का उपयोग कर रहे हैं (जो आप आमतौर पर नहीं कर रहे हैं, क्या आप एक स्ट्रिंग स्मृति में 100 एमबी है कि होता है?)
लेकिन असली क्लिनिक पायथन 2.3 है। जहां मैं आपको समय भी नहीं दिखाऊंगा, क्योंकि यह इतना धीमा है कि यह अभी तक समाप्त नहीं हुआ है। इन परीक्षणों में अचानक मिनट लगते हैं । सिवाय एपेंड / ज्वाइन के, जो बाद के पायथन के तहत उतनी ही तेज है।
हाँ। पाषाण काल में पाषाण युग में स्ट्रिंग संघन बहुत धीमा था। लेकिन 2.4 पर यह अब (या कम से कम अजगर 2.4.7) नहीं है, इसलिए ऐपेंड / जॉइन का उपयोग करने की सिफारिश 2008 में पुरानी हो गई, जब पायथन 2.3 को अपडेट होना बंद हो गया, और आपको इसका उपयोग करना बंद कर देना चाहिए था। :-)
(अपडेट: जब मैंने परीक्षण को अधिक सावधानी से किया, तो उपयोग करना बंद कर देता है +
और +=
पायथन 2.3 पर दो तारों के लिए तेजी से होता है। उपयोग करने की सिफारिश ''.join()
गलतफहमी होनी चाहिए । "
हालाँकि, यह CPython है। अन्य कार्यान्वयन में अन्य चिंताएँ हो सकती हैं। और यह सिर्फ एक और कारण है कि समय से पहले अनुकूलन सभी बुराई की जड़ है। जब तक आप पहले इसे माप नहीं लेते हैं, तब तक "तेज़" तकनीक का उपयोग न करें।
इसलिए स्ट्रिंग कॉन्फैनेटेशन करने के लिए "सबसे अच्छा" संस्करण + या + = का उपयोग करना है । और अगर यह आपके लिए धीमा हो जाता है, जो बहुत कम संभावना है, तो कुछ और करें।
तो मैं अपने कोड में बहुत सारे ऐपेंडेंट / जॉइन का उपयोग क्यों करूं? क्योंकि कभी-कभी यह वास्तव में स्पष्ट होता है। विशेष रूप से जब आपको एक साथ समतल करना चाहिए, तो रिक्त स्थान या अल्पविराम या newlines द्वारा अलग किया जाना चाहिए।