2010-08-21 19 views
21

मेरे पास स्ट्रिंग में एक स्ट्रिंग और मनमानी अनुक्रमणिका है। मुझे इंडेक्स से पहले एक सबस्ट्रिंग की पहली घटना मिलनी चाहिए।स्ट्रिंग में पाइथन रिवर्स

एक उदाहरण: मैं सूचकांक और str.rfind()

s = "Hello, I am 12! I like plankton but I don't like Baseball." 
index = 34 #points to the 't' in 'but' 
index_of_2nd_I = s.rfind('I', index) 
#returns = 36 and not 16 

अब मैं rfind उम्मीद होती है() का उपयोग कर 2 मैं के सूचकांक (16) वापस जाने के लिए द्वारा 2 मैं के सूचकांक खोजना चाहते हैं, लेकिन यह 36 लौटाता है। दस्तावेज़ों में इसे देखने के बाद मुझे पता चला कि आरएफआईंड रिवर्स ढूंढने के लिए खड़ा नहीं है।

मैं पाइथन के लिए बिल्कुल नया हूं, तो क्या रिवर्स खोजने के लिए समाधान में बनाया गया है? कुछ पायथन [:: - 1] जादू के साथ स्ट्रिंग को उलटाने और खोजने का उपयोग आदि की तरह? या क्या मुझे स्ट्रिंग के माध्यम से char द्वारा पुनरावृत्त चार को उलटना होगा?

+1

यदि जेएसज़ वास्तव में 12 है तो वह एक उज्ज्वल बच्चा है ;-) – sidewinderguy

+0

हाँ, रिवर्स खोज की शुरुआत सही वस्तु नहीं है। मुझे 'rfind'' में ''r'' 'गुमराह करने के लिए' (इच्छित इरादे पर) लगता है। 'S.rfind (s, start, end) 'को देखने के लिए यह कम अस्पष्ट है'' प्रारंभ * अंत में * अंतिम * घटना को वापस लौटने के रूप में। – YvesgereY

उत्तर

27

आपकी कॉल पर पर शुरू करने के लिए rfind बताएं। आप rfind overload का उपयोग करना चाहते हैं जो एक स्ट्रिंग, प्रारंभ और अंत लेता है। यह बताओ स्ट्रिंग (0) की शुरुआत में शुरू करने और index को देख बंद करने के लिए:

>>> s = "Hello, I am 12! I like plankton but I don't like Baseball." 
>>> index = 34 #points to the 't' in 'but' 
>>> index_of_2nd_I = s.rfind('I', 0, index) 
>>> 
>>> index_of_2nd_I 
16 
0

मैं उत्सुक कैसे rpartition द्वारा छोर से स्ट्रिंग के लिए एन बार देख लागू करने के लिए बन गया है और किया यह वें rpartition पाश:

orig = s = "Hello, I am 12! I like plankton but I don't like Baseball." 
found = tail = '' 
nthlast = 2 
lookfor = 'I' 
for i in range(nthlast): 
    tail = found+tail 
    s,found,end = s.rpartition(lookfor) 
    if not found: 
     print "Only %i (less than %i) %r in \n%r" % (i, nthlast, lookfor, orig) 
     break 
    tail = end + tail 
else: 
    print(s,found,tail) 
+1

वाह, जो वास्तव में दर्द होता है :( – unbeli

+0

कुछ भी विशिष्ट? प्रेरणा यह है कि खोजों के विपरीत विभाजन की शुरुआत सूचकांक नहीं है क्योंकि यह अनुक्रमित है। –

संबंधित मुद्दे