एक स्ट्रिंग में एक सबरिंग की अंतिम घटना का सूचकांक खोजें


348

मैं दिए गए इनपुट स्ट्रिंग में एक निश्चित सबस्ट्रिंग की अंतिम घटना की स्थिति (या सूचकांक) खोजना चाहता हूं str

उदाहरण के लिए, मान लें कि इनपुट स्ट्रिंग है str = 'hello'और सबस्ट्रिंग है target = 'l', तो इसे आउटपुट 3 होना चाहिए।

मैं यह कैसे कर सकता हूँ?

जवाबों:


600

उपयोग करें .rfind():

>>> s = 'hello'
>>> s.rfind('l')
3

strचर नाम के रूप में भी उपयोग न करें या आप बिल्ट-इन छाया देंगे str()


7
टिप के लिए +1 strएक चर नाम के रूप में उपयोग नहीं करने के लिए । एक और परिवर्तनशील नाम जिसे लोगों को अजगर से बचना चाहिए abc; abcदेशी एपीआई में एक मॉड्यूल कहा जाता है।
प्रोमाइमर

81

आप Python2 लिंक का उपयोग rfind()या उपयोग कर सकते हैं :rindex()
rfind() rindex()

>>> s = 'Hello StackOverflow Hi everybody'

>>> print( s.rfind('H') )
20

>>> print( s.rindex('H') )
20

>>> print( s.rfind('other') )
-1

>>> print( s.rindex('other') )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

अंतर यह है कि जब सबस्ट्रिंग नहीं मिला है, तो अपवाद के दौरान rfind()रिटर्न (Python2 लिंक:) उठता है ।-1rindex()ValueErrorValueError

यदि आप rfind()रिटर्न कोड की जांच नहीं करना चाहते हैं -1, तो आप पसंद कर सकते हैं rindex()कि एक समझने योग्य त्रुटि संदेश प्रदान करेगा। और आप उन मिनटों की खोज कर सकते हैं जहाँ -1आपके कोड के भीतर से अप्रत्याशित मान आ रहा है ...


उदाहरण: अंतिम न्यूलाइन वर्ण की खोज

>>> txt = '''first line
... second line
... third line'''

>>> txt.rfind('\n')
22

>>> txt.rindex('\n')
22

हाय @JacobSchneider। मैंने आपकी टिप्पणी के अनुसार एक उदाहरण जोड़ा है। मुझे आपका मुद्दा समझ नहीं आ रहा है। कृपया अधिक जानकारी प्रदान करें: पायथन संस्करण, आपकी स्ट्रिंग की सामग्री ... चीयर्स
ओलिबर

39

str.rindexविधि का प्रयोग करें ।

>>> 'hello'.rindex('l')
3
>>> 'hello'.index('l')
2


3

more_itertoolsसभी के सूचकांकों को खोजने के लिए पुस्तकालय प्रदान करता है उपकरण वर्ण या सभी सबस्ट्रिंग

दिया हुआ

import more_itertools as mit


s = "hello"
pred = lambda x: x == "l"

कोड

पात्र

अब वहाँ rlocateउपकरण उपलब्ध है:

next(mit.rlocate(s, pred))
# 3

एक पूरक उपकरण है locate:

list(mit.locate(s, pred))[-1]
# 3

mit.last(mit.locate(s, pred))
# 3

सबस्ट्रिंग

window_sizeकई वस्तुओं की अग्रणी वस्तु का पता लगाने के लिए एक पैरामीटर भी उपलब्ध है:

s = "How much wood would a woodchuck chuck if a woodchuck could chuck wood?"
substring = "chuck"
pred = lambda *args: args == tuple(substring)

next(mit.rlocate(s, pred=pred, window_size=len(substring)))
# 59

2

एक निष्क्रिय पोस्ट को फिर से जीवित करने की कोशिश नहीं की जा रही है, लेकिन चूंकि यह अभी तक पोस्ट नहीं किया गया है ...

(इस सवाल को खोजने से पहले मैंने ऐसा कैसे किया)

s = "hello"
target = "l"
last_pos = len(s) - 1 - s[::-1].index(target)

स्पष्टीकरण: जब आप अंतिम घटना की खोज कर रहे हैं, तो वास्तव में आप पहली घटना को उलटे हुए स्ट्रिंग में खोज रहे हैं। यह जानते हुए, मैंने किया s[::-1](जो एक उलट स्ट्रिंग लौटाता है), और फिर targetवहां से अनुक्रमित किया गया। तब मैंने किया len(s) - 1 - the index foundक्योंकि हम अपरिवर्तित (यानी मूल) स्ट्रिंग में सूचकांक चाहते हैं ।

हालांकि बाहर देखो! यदि targetएक से अधिक वर्ण हैं, तो आप शायद इसे उलट स्ट्रिंग में नहीं पाएंगे। इसे ठीक करने के लिए, का उपयोग करें last_pos = len(s) - 1 - s[::-1].index(target[::-1]), जो एक उलट संस्करण के लिए खोज करता है target


1
मैंने यह उत्तर इसलिए दिया क्योंकि मूल प्रश्न के लिए बहुत उपयोगी नहीं था, लेकिन यह सामान्य रूप से दिलचस्प और शैक्षिक था। मुझे लगता है कि अजगर के बारे में बहुत कुछ इस तरह से है।
बिल इवांस मैरिपोसा

1

यदि आप Rfind का उपयोग नहीं करना चाहते हैं तो यह चाल /

def find_last(s, t):
    last_pos = -1
    while True:
        pos = s.find(t, last_pos + 1)
        if pos == -1:
            return last_pos
        else:
            last_pos = pos

0

आप rindex()स्ट्रिंग में किसी वर्ण की अंतिम घटना प्राप्त करने के लिए फ़ंक्शन का उपयोग कर सकते हैं

s="hellloooloo"
b='l'
print(s.rindex(b))

0

पायथन स्ट्रिंग रिन्डेक्स () विधि

विवरण
पायथन स्ट्रिंग विधि रिंडेक्स () अंतिम इंडेक्स लौटाता है, जहां सबस्ट्रिंग str पाया जाता है, या यदि कोई ऐसा इंडेक्स मौजूद नहीं है, तो अपवाद को उठाता है, वैकल्पिक रूप से स्ट्रिंग को खोज को प्रतिबंधित करता है [beg: end]।

सिंटैक्स
निम्नलिखित है रिंडेक्स () विधि के लिए सिंटैक्स -

str.rindex(str, beg=0 end=len(string))

पैरामीटर
str - यह खोजे जाने वाले स्ट्रिंग को निर्दिष्ट करता है।

भीख - यह प्रारंभिक सूचकांक है, डिफ़ॉल्ट रूप से 0

len - यह इंडेक्स को समाप्त कर रहा है, डिफ़ॉल्ट रूप से स्ट्रिंग की लंबाई के बराबर है।

रिटर्न वैल्यू
यह विधि पिछले इंडेक्स को लौटाती है अगर मिला नहीं तो एक अपवाद उठता है अगर स्ट्रैट नहीं मिलता है।

उदाहरण
निम्न उदाहरण रिन्डेक्स () विधि के उपयोग को दर्शाता है।

लाइव डेमो

! / Usr / bin / अजगर

str1 = "this is string example....wow!!!";
str2 = "is";

print str1.rindex(str2)
print str1.index(str2)

जब हम प्रोग्राम के ऊपर चलते हैं, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

5
2

Ref: पायथन स्ट्रिंग रिन्डेक्स () विधि - ट्यूटोरियलस्पर्श

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.