একটি স্ট্রিংয়ের মধ্যে একটি স্ট্রিংয়ের সর্বশেষ ইভেন্টের সূচকটি সন্ধান করুন


348

আমি প্রদত্ত ইনপুট স্ট্রিংয়ে কোনও নির্দিষ্ট স্ট্রিংয়ের সর্বশেষ ঘটনার অবস্থান (বা সূচক) সন্ধান করতে চাই str

উদাহরণস্বরূপ, ধরুন ইনপুট স্ট্রিংটি str = 'hello'এবং সাবস্ট্রিংটি হয় target = 'l', তারপরে এটি 3 আউটপুট করা উচিত।

কিভাবে আমি এটি করতে পারব?

উত্তর:


600

ব্যবহার .rfind():

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

strপরিবর্তনশীল নাম হিসাবে ব্যবহার করবেন না বা আপনি বিল্ট-ইনটি ছায়া করবেন str()


7
টিপটির জন্য strপরিবর্তনশীল নাম হিসাবে ব্যবহার না করার জন্য +1 । অজগর থেকে অন্য পরিবর্তনশীল নামটি এড়ানো উচিত abc; abcনেটিভ এপিআইতে একটি মডিউল নামে পরিচিত ।
প্রগতিমার

81

আপনি ব্যবহার করতে পারেন rfind()বা পাইথন 2 লিঙ্কগুলি: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()ফিরে আসে (পাইথন 2 লিঙ্ক :)।-1rindex()ValueErrorValueError

আপনি যদি rfind()রিটার্ন কোডটি চেক করতে না চান তবে আপনি -1পছন্দ করতে পারেন rindex()এটি একটি বোধগম্য ত্রুটি বার্তা সরবরাহ করবে। অন্যথায় আপনি কয়েক মিনিটের জন্য অনুসন্ধান করতে পারেন যেখানে -1আপনার কোডের মধ্যে অপ্রত্যাশিত মান আসছে ...


উদাহরণ: সর্বশেষ নিউলাইন চরিত্রের অনুসন্ধান

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

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

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

হাই @ জ্যাকবস্কিনিডার আমি আপনার মন্তব্য অনুযায়ী একটি উদাহরণ যুক্ত করেছি। আমি আপনার বিষয়টি বুঝতে পারি না। দয়া করে আরও তথ্য সরবরাহ করুন: পাইথন সংস্করণ, আপনার স্ট্রিংয়ের বিষয়বস্তু ... চিয়ার্স
অলিব্রে

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
আমি এই উত্তরটিকে অগ্রাহ্য করেছি কারণ মূল প্রশ্নের পক্ষে খুব বেশি কার্যকর না হলেও এটি সাধারণভাবে আকর্ষণীয় এবং শিক্ষামূলক ছিল। আমি মনে করি পাইথন সম্পর্কে কারও শেখার বিষয়টি ঠিক এইরকম।
মেরিপোসাতে বিল ইভান্স

@ বিলিএভানস্যাটমারিপোসাকে ধন্যবাদ :)
আদি 219

1

আপনি যদি আরফাইন্ড ব্যবহার করতে না চান তবে এই কৌশলটি করবে /

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.rindex(str, beg=0 end=len(string))

পরামিতি
str - এটি অনুসন্ধান করার জন্য স্ট্রিংটি নির্দিষ্ট করে।

ভিক্ষা - এটি সূচনা সূচক, ডিফল্টরূপে এটি 0 হয়

লেন - এটি সূচকটি সমাপ্ত হচ্ছে, ডিফল্টরূপে তার স্ট্রিংয়ের দৈর্ঘ্যের সমান।

প্রত্যাবর্তন মান
এই পদ্ধতিটি শেষ সূচকটি ফেরত দেয় যদি অন্যথায় খুঁজে পাওয়া যায় না তবে ব্যতিক্রম উত্থাপন করে।

উদাহরণ
নীচের উদাহরণে রিনডেক্স () পদ্ধতির ব্যবহার দেখানো হয়েছে।

সরাসরি নমুনা

!, / Usr / bin / python-

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

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

যখন আমরা প্রোগ্রামের উপরে চলে যাই, এটি নিম্নলিখিত ফলাফল তৈরি করে -

5
2

উল্লেখ: পাইথন স্ট্রিং রিনডেক্স () পদ্ধতি - টিউটোরিয়ালপয়েন্ট

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.