जेसन शहीर का जवाब सही है लेकिन कुछ और एक्सपोज़र का उपयोग कर सकता है।
सबसे पहले, एक स्ट्रिंग को एक पूर्णांक संख्या को दोहराने के लिए, आप ओवरलोड किए गए गुणन का उपयोग कर सकते हैं:
>>> 'abc' * 7
'abcabcabcabcabcabcabc'
इसलिए, एक स्ट्रिंग को दोहराने के लिए जब तक वह कम से कम जब तक आप चाहते हैं, तब तक आप दोहराए जाने वाले उचित संख्या की गणना करते हैं और इसे उस गुणन ऑपरेटर के दाईं ओर डालते हैं:
def repeat_to_at_least_length(s, wanted):
return s * (wanted//len(s) + 1)
>>> repeat_to_at_least_length('abc', 7)
'abcabcabc'
फिर, आप इसे सटीक लंबाई के साथ ट्रिम कर सकते हैं जिसे आप ऐरे स्लाइस के साथ चाहते हैं:
def repeat_to_length(s, wanted):
return (s * (wanted//len(s) + 1))[:wanted]
>>> repeat_to_length('abc', 7)
'abcabca'
वैकल्पिक रूप से, जैसा कि पिल्मॉड के उत्तर में सुझाया गया है कि शायद कोई भी अब तक नोटिस करने के लिए पर्याप्त स्क्रॉल नहीं करता है, आप सभी divmod
आवश्यक पुनरावृत्ति की संख्या और अतिरिक्त वर्णों की संख्या की गणना करने के लिए उपयोग कर सकते हैं :
def pillmod_repeat_to_length(s, wanted):
a, b = divmod(wanted, len(s))
return s * a + s[:b]
कौनसा अच्छा है? आइए इसे बेंचमार्क करें:
>>> import timeit
>>> timeit.repeat('scheirer_repeat_to_length("abcdefg", 129)', globals=globals())
[0.3964178159367293, 0.32557755894958973, 0.32851039397064596]
>>> timeit.repeat('pillmod_repeat_to_length("abcdefg", 129)', globals=globals())
[0.5276265419088304, 0.46511475392617285, 0.46291469305288047]
तो, पिल्मॉड का संस्करण 40% धीमा जैसा कुछ है, जो बहुत बुरा है, क्योंकि व्यक्तिगत रूप से मुझे लगता है कि यह बहुत अधिक पठनीय है। इसके कई संभावित कारण हैं, इसकी शुरुआत लगभग 40% अधिक बायोटेक निर्देशों के संकलन से हुई है।
नोट: ये उदाहरण //
पूर्णांक विभाजन को छोटा करने के लिए नए- ish ऑपरेटर का उपयोग करते हैं । इसे अक्सर पायथन 3 फीचर कहा जाता है, लेकिन PEP 238 के अनुसार , इसे Python 2.2 में वापस लाया गया। आप केवल है अजगर 3 में (या मॉड्यूल है कि में इसका उपयोग करना from __future__ import division
), लेकिन आप कर सकते हैं यह परवाह किए बिना उपयोग करें।
//
पायथन 3 में होना आवश्यक नहीं है ? या+1
छत समारोह के लिए एक स्पष्ट कॉल का उपयोग करना और छोड़ना पर्याप्त होगा। इसके अलावा, एक नोट: उत्पन्न स्ट्रिंग वास्तव में एक अतिरिक्त पुनरावृत्ति होती है जब यह समान रूप से विभाजित होती है; अतिरिक्त बंटवारे से कट जाता है। इसने मुझे पहले उलझन में डाल दिया।