python tutorial पायथन में राइट-टू-लेफ्ट स्ट्रिंग की जगह?




python tutorial (6)

मैं पायथन में एक स्ट्रिंग की जगह करना चाहता हूं, लेकिन केवल दाएं से बाएं जाने वाला पहला उदाहरण है। एक आदर्श दुनिया में मैं होता:

myStr = "mississippi"
print myStr.rreplace("iss","XXX",1)

> missXXXippi

ऐसा करने का सबसे अच्छा तरीका क्या है, यह देखते हुए कि rreplace मौजूद नहीं है?


>>> re.sub(r'(.*)iss',r'\1XXX',myStr)
'missXXXippi'

रेगेक्स इंजन सभी स्ट्रिंग को कोज़्यूम करता है और फिर अनटील आइस को पीछे करना शुरू करता है। फिर यह आवश्यक पैटर्न के साथ पाया स्ट्रिंग को बदलता है।

कुछ गति tests

[::-1] साथ समाधान तेजी से निकलता है।

re समाधान केवल लंबे समय तक तार (1 मिलियन से अधिक प्रतीकों) के लिए तेज था।


आप एक स्ट्रिंग को उल्टा कर सकते हैं जैसे:

myStr[::-1]

बदलने के लिए बस .replace जोड़ें:

print myStr[::-1].replace("iss","XXX",1)

हालाँकि अब आपका स्ट्रिंग पीछे की ओर है, इसलिए इसे फिर से उल्टा करें:

myStr[::-1].replace("iss","XXX",1)[::-1]

और आपने कल लिया। यदि आपके बदले हुए तार स्थिर हैं तो उन्हें ओवरहेड को कम करने के लिए फ़ाइल में रिवर्स करें। यदि नहीं, तो एक ही चाल काम करेगी।

myStr[::-1].replace("iss"[::-1],"XXX"[::-1],1)[::-1]

यह एक गंदे हैक की तरह है, लेकिन आप स्ट्रिंग को उल्टा कर सकते हैं और इसके साथ उलटे तार भी बदल सकते हैं।

"mississippi".reverse().replace('iss'.reverse(), 'XXX'.reverse(),1).reverse()

>>> myStr[::-1].replace("iss"[::-1], "XXX"[::-1], 1)[::-1]
'missXXXippi'

आप str.rpartition() उपयोग भी कर सकते हैं जो स्ट्रिंग को सही से अलग विभाजक द्वारा विभाजित करता है और एक टपल लौटाता है:

myStr = "mississippi"

first, sep, last = myStr.rpartition('iss')
print(first + 'XXX' + last)
# missXXXippi

rsplit और join का उपयोग एक rreplace के प्रभावों को अनुकरण करने के लिए किया जा सकता है

>>> 'XXX'.join('mississippi'.rsplit('iss', 1))
'missXXXippi'






python