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


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

शायद पसंद है myString[2:end]?

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


1595
2018-03-19 17:29


मूल


इसमें एक स्पष्ट स्पष्टीकरण है pythoncentral.io/cutting-and-slicing-strings-in-python - Mario Ruiz


जवाब:


>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'

पायथन इस अवधारणा को "स्लाइसिंग" कहते हैं और यह सिर्फ तारों से अधिक काम करता है। जरा देखो तो यहाँ एक व्यापक परिचय के लिए।


2417
2018-03-19 17:30





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

some_string[::-1]

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

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

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


305
2018-03-20 00:58



@mtahmed पूरी तरह से सवाल से संबंधित है। क्या होगा यदि आप स्ट्रिंग से वैकल्पिक वर्णों का चयन करके सबस्ट्रिंग करना चाहते हैं? वह my_string होगा [:: 2] - Endophage
मुझे लगता है कि यह अधिक संभावना है कि आप स्लाइस के लिए तीसरे पैरामीटर का उल्लेख करना चाहते हैं। एक स्ट्रिंग से हर दूसरे चरित्र को प्राप्त करने की आवश्यकता कहीं भी एक महत्वपूर्ण उपयोग मामला हो सकता है, लेकिन मुझे इसे कभी नहीं करना पड़ा। ऐसा नहीं है कि आप जो जानते हैं उसे दिखाने के लिए कुछ भी गलत है - अगर आप ऐसा नहीं कर सकते हैं तो चीजों को जानने का क्या मतलब है। :) लेकिन सवाल की प्रासंगिकता के मामले में अतिस्तरीय है। - John Lockwood
निश्चित रूप से, वैकल्पिक वर्णों का चयन करने का विशिष्ट उदाहरण प्रश्न के लिए प्रासंगिक नहीं हो सकता है, लेकिन समझने के लिए एक तीसरा पैरामीटर बहुत ही प्रासंगिक है और सरल उदाहरण यह बताते हैं कि यह कैसे काम करता है। पाइथन समुदाय के पास दोस्ताना तरीके से नए सदस्यों को शिक्षित करने का एक बड़ा इतिहास भी है :-) - Endophage


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

s = Substr(s, beginning, LENGTH)

तो पैरामीटर हैं beginning तथा LENGTH

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

s = s[ beginning : beginning + LENGTH]

92
2017-08-04 11:43



शुरुआत करने वालों को पाइथन में जाने पर पाइथोनिक तरीके सीखना चाहिए, अन्य भाषा आदतों से चिपके रहना नहीं चाहिए - Nicolae Surdu


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


45
2018-03-02 05:19



सरल और आसान। धन्यवाद - Jacky Supit


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

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

अनुक्रम प्रकारों की एक प्रति बनाने के लिए यह एक सामान्य मुहावरे है (आंतरिक तारों की नहीं)। [:] शालो एक सूची कॉपी करता है, देखें अजगर-सूची टुकड़ा से इस्तेमाल के लिए कोई स्पष्ट कारण-


17
2018-03-19 18:02



इसमें सबस्ट्रिंग के बारे में सवाल करने के लिए लगभग कुछ भी नहीं है। स्ट्रिंग पर भी लागू नहीं होता है। कह रहा है स्ट्रिंग ए = स्ट्रिंगबी पर्याप्त है ... - Nicolae Surdu
[:] पूर्ण प्रतिलिपि एक नई प्रतिलिपि बनाता है, स्लाइस सिंटैक्स का उपयोग करता है और "प्रारंभ से अंत तक सबस्ट्रिंग" के रूप में पढ़ा जाता है - gimel
बिंदु क्या है क्योंकि तार अपरिवर्तनीय हैं? a=b पर्याप्त होना चाहिए। - bfontaine
@ जिम: असल में, [:] एक अपरिवर्तनीय प्रकार पर एक प्रतिलिपि नहीं बनाती है। जबकि mysequence[:] ज्यादातर हानिरहित है जब mysequence एक अपरिवर्तनीय प्रकार की तरह है str, tuple, bytes (पीई 3) या unicode (Py2), a = b[:] के बराबर है a = b, यह स्लाइसिंग बाइट कोड को प्रेषित करने में थोड़ा समय बर्बाद करता है, जिस पर ऑब्जेक्ट पहचान परीक्षणों के अलावा, ऑब्जेक्ट पहचान परीक्षणों के अलावा, जब यह ऑब्जेक्ट पहचान परीक्षणों से अलग होता है, तो ऑब्जेक्ट स्वयं को लौटकर प्रतिक्रिया देता है, यह केवल किसी के अपरिवर्तनीय स्वयं के लिए एक और संदर्भ लौटने के बराबर है। - ShadowRanger
इस उत्तर की अन्य आलोचनाओं को पूरा करने का प्रयास: पायथन में, तार अपरिवर्तनीय हैं, इसलिए स्ट्रिंग की एक प्रति बनाने का कोई कारण नहीं है - इसलिए s[:] एक प्रतिलिपि बिल्कुल नहीं बनाता है: s = 'abc'; s0 = s[:]; assert s is s0। हां यह सूचियों तक पाइथन में एक सूची की प्रतिलिपि बनाने का बेवकूफ तरीका था list.copy, लेकिन एक अपरिवर्तनीय प्रकार के पूर्ण टुकड़े के पास प्रतिलिपि बनाने का कोई कारण नहीं है क्योंकि इसे बदला नहीं जा सकता है, इसलिए स्मृति में केवल एक ही हो सकता है और हमें इसे कॉपी करने में समय बर्बाद नहीं करना चाहिए। चूंकि यह उत्तर गलत है और सवाल का जवाब भी नहीं देता है- इसे हटाया जाना चाहिए? - Aaron Hall♦


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

शायद पसंद है myString[2:end]?

हां, यह वास्तव में काम करता है यदि आप असाइन करते हैं, या बाँध, नाम,endनिरंतर सिंगलटन के लिए, 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'

मैं स्लाइस नोटेशन में बहुत विस्तार से समझाता हूं टुकड़ा नोटेशन प्रश्न समझाओ मेरा जवाब। 


13
2018-06-23 21:53





"अंत" को छोड़कर आप इसे वहां मिला है। इसे स्लाइस नोटेशन कहा जाता है। आपका उदाहरण पढ़ना चाहिए:

new_sub_string = myString[2:]

यदि आप दूसरा पैरामीटर छोड़ देते हैं तो यह निश्चित रूप से स्ट्रिंग का अंत है।


7
2018-03-19 17:31





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

  1. आप उपयोग कर सकते हैं 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. पायथन है टुकड़ा वस्तुओं:

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

6
2017-08-31 04:28





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

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

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

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

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

 >>>myString[:end]
 'Hello' 

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

 >>>myString[end]
 ' '

2
2018-03-18 12:01





हार्डकोडेड इंडेक्स का उपयोग करना एक गड़बड़ हो सकता है।

इससे बचने के लिए, पायथन एक अंतर्निर्मित वस्तु प्रदान करता है 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

स्लाइस का उपयोग करके आप पठनीयता प्राप्त करते हैं।


0
2017-08-31 04:50



शायद यह सबसे अच्छा उदाहरण नहीं है, क्योंकि हार्डकोडेड इंडेक्स बने रहते हैं और पठनीयता मध्यवर्ती चर से आती है, जिसे आप पहले उदाहरण में इस्तेमाल कर सकते थे। - ASalazar