string - क्या Python में एक स्ट्रिंग को घटाने का कोई तरीका है?




(9)

स्ट्रिंग के अंत तक तीसरे वर्ण से नई स्ट्रिंग प्राप्त करने के लिए, पायथन में एक स्ट्रिंग को प्रतिस्थापित करने का कोई तरीका है?

शायद myString[2:end] ?

यदि दूसरे भाग को छोड़कर 'अंत तक' का अर्थ है, यदि आप पहले भाग को छोड़ देते हैं, तो क्या यह शुरुआत से शुरू होता है?


Answers

सबस्ट्र () सामान्य रूप से (यानी PHP, पर्ल) इस तरह से काम करता है:

s = Substr(s, beginning, LENGTH)

तो पैरामीटर शुरू हो रहे हैं और LENGTH

लेकिन पायथन का व्यवहार अलग है, यह शुरुआत की उम्मीद है और एक अंत (!) के बाद। शुरुआती लोगों द्वारा स्पॉट करना मुश्किल है। तो Substr (एस, शुरुआत, LENGTH) के लिए सही प्रतिस्थापन है

s = s[ beginning : beginning + LENGTH]

हार्डकोड इंडेक्स का उपयोग करने के बारे में कोई भी उल्लेख नहीं कर सकता है।

इससे बचने के लिए, पायथन एक निर्मित ऑब्जेक्ट slice() प्रदान करता है।

string = "my company has 1000$ on profit, but I lost 500$ gambling."

अगर हम जानना चाहते हैं कि मुझे कितना पैसा बचा है।

सामान्य समाधान:

final = int(string[15:19]) - int(string[43:46])
print(final)
>>>500

स्लाइस का उपयोग करना:

EARNINGS = slice(15,19)
LOSSES = slice(43,46)
final = int(string[EARNINGS]) - int(string[LOSSES])
print(final)
>>>500

आप उस टुकड़े का उपयोग करके नोटिस कर सकते हैं जिसे आप पठनीयता प्राप्त करते हैं


इसे प्राप्त करने का एक आम तरीका स्ट्रिंग स्लाइसिंग द्वारा है। MyString[a:b] आपको इंडेक्स से एक सबस्ट्रिंग देता है (बी -1)


शायद मुझे यह याद आया, लेकिन मुझे इस पृष्ठ पर मूल प्रश्न (ओं) पर पूरा उत्तर नहीं मिला क्योंकि चरों पर और चर्चा नहीं की गई है। तो मुझे खोज पर जाना पड़ा।

चूंकि मुझे अभी तक टिप्पणी करने की अनुमति नहीं है, इसलिए मुझे अपना निष्कर्ष यहां जोड़ने दें। मुझे यकीन है कि इस पृष्ठ तक पहुंचने पर मैं इसमें दिलचस्पी रखने वाला अकेला नहीं था:

 >>>myString = 'Hello World'
 >>>end = 5

 >>>myString[2:end]
 'llo'

यदि आप पहला भाग छोड़ देते हैं, तो आपको मिलता है

 >>>myString[:end]
 'Hello' 

और यदि आपने छोड़ा: बीच में भी आपको सबसे सरल सबस्ट्रिंग मिल गया, जो 5 वां चरित्र होगा (0 से शुरू होने वाली गिनती, इसलिए यह इस मामले में खाली है):

 >>>myString[end]
 ' '

स्ट्रिंग के अंत तक तीसरे वर्ण से नई स्ट्रिंग प्राप्त करने के लिए, पायथन में एक स्ट्रिंग को प्रतिस्थापित करने का कोई तरीका है?

शायद myString[2:end] ?

हां, यह वास्तव में काम करता है अगर आप असाइन सिंगलटन को नाम, end , असाइन, या bind करते हैं, None :

>>> end = None
>>> myString = '1234567890'
>>> myString[2:end]
'34567890'

स्लाइस नोटेशन में 3 महत्वपूर्ण तर्क हैं:

  • प्रारंभ
  • रुकें
  • कदम

दिए जाने पर उनके डिफ़ॉल्ट None - लेकिन हम उन्हें स्पष्ट रूप से पारित कर सकते हैं:

>>> stop = step = None
>>> start = 2
>>> myString[start:stop:step]
'34567890'

यदि दूसरे भाग को छोड़कर 'अंत तक' का अर्थ है, यदि आप पहले भाग को छोड़ देते हैं, तो क्या यह शुरुआत से शुरू होता है?

हां, उदाहरण के लिए:

>>> start = None
>>> stop = 2
>>> myString[start:stop:step]
'12'

ध्यान दें कि हम स्लाइस में शुरूआत शामिल करते हैं, लेकिन हम केवल उस तक जाते हैं, जिसमें शामिल हैं, रोकें।

जब चरण None , डिफ़ॉल्ट रूप से स्लाइस चरण के लिए 1 का उपयोग करता है। यदि आप एक नकारात्मक पूर्णांक के साथ कदम रखते हैं, तो पाइथन अंत से लेकर शुरुआत तक जाने के लिए पर्याप्त स्मार्ट है।

>>> myString[::-1]
'0987654321'

मैं स्लाइस नोटेशन प्रश्न की व्याख्या करने के अपने जवाब में बड़ी जानकारी में स्लाइस नोटेशन की व्याख्या करता हूं।


बस पूर्णता के लिए किसी और ने इसका उल्लेख नहीं किया है। एक सरणी टुकड़ा के लिए तीसरा पैरामीटर एक कदम है। तो एक स्ट्रिंग को उलटना उतना सरल है जितना:

some_string[::-1]

या वैकल्पिक वर्णों का चयन होगा:

"H-e-l-l-o- -W-o-r-l-d"[::2] # outputs "Hello World"

स्ट्रिंग के माध्यम से आगे और पीछे की ओर कदम रखने की क्षमता प्रारंभ या अंत से टुकड़ा सरणी करने में सक्षम होने के साथ स्थिरता बनाए रखती है।


एक उदाहरण यहां गायब प्रतीत होता है: पूर्ण (उथला) प्रतिलिपि।

>>> x = "Hello World!"
>>> x
'Hello World!'
>>> x[:]
'Hello World!'
>>> x==x[:]
True
>>> 

अनुक्रम प्रकारों की एक प्रति बनाने के लिए यह एक सामान्य मुहावरे है (आंतरिक तारों की नहीं)। [:] शालो एक सूची की प्रतिलिपि बनाते हैं, python-list-slice-used-for-no-obvious-reason


मैं चर्चा में दो अंक जोड़ना चाहता हूं:

  1. आप "शुरुआत से" या "अंत तक" निर्दिष्ट करने के लिए खाली स्थान पर बजाय किसी का None उपयोग None कर सकते हैं:

    'abcde'[2:None] == 'abcde'[2:] == 'cde'
    

    यह कार्यों में विशेष रूप से सहायक है, जहां आप एक खाली स्थान को तर्क के रूप में प्रदान नहीं कर सकते हैं:

    def substring(s, start, end):
        """Remove `start` characters from the beginning and `end` 
        characters from the end of string `s`.
    
        Examples
        --------
        >>> substring('abcde', 0, 3)
        'abc'
        >>> substring('abcde', 1, None)
        'bcde'
        """
        return s[start:end]
    
  2. पायथन के slice हैं:

    idx = slice(2, None)
    'abcde'[idx] == 'abcde'[2:] == 'cde'
    

सार्वभौमिक_नलाइन को सत्य पर सेट करें, यानी

command_stdout = Popen(['ls', '-l'], stdout=PIPE, universal_newlines=True).communicate()[0]




python string