Bir dizedeki alt dizenin son oluştuğu dizini bulma


349

Belirli bir alt dize verilen giriş dizesinde son oluşum konumunu (veya dizin) bulmak istiyorum str.

Örneğin, giriş dizesinin str = 'hello've alt dizenin olduğunu varsayalım target = 'l', o zaman çıktı 3 olmalıdır.

Bunu nasıl yapabilirim?

Yanıtlar:


602

Kullanım .rfind():

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

Ayrıca strdeğişken adı olarak kullanmayın yoksa yerleşik gölgelendirirsiniz str().


7
Bahşişin strdeğişken adı olarak kullanılmaması için +1 . İnsanların python'da kaçınmaları gereken bir diğer değişken adı abc; abcyerel API'da adlandırılan bir modül var .
progyammer

81

rfind()Veya Python2 bağlantılarını kullanabilirsiniz :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

Alt dize bulunmazsa Aradaki fark ise rfind()döner -1iken rindex()bir özel durum ValueError(Python2 link: ValueError).

rfind()Dönüş kodunu kontrol etmek istemiyorsanız -1, rindex()bunun anlaşılabilir bir hata mesajı vermesini tercih edebilirsiniz . Aksi takdirde -1, kodunuzdan beklenmeyen değerin geldiği dakikaları arayabilirsiniz ...


Örnek: Son satırsonu karakterinin aranması

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

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

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

Merhaba @JacobSchneider. Yorumunuza göre bir örnek ekledim. Sorununuzu anlamıyorum. Lütfen daha fazla bilgi verin: Python sürümü,
Dizenizin

39

str.rindexYöntemi kullanın .

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

5

Bunu dene:

s = 'hello plombier pantin'
print (s.find('p'))
6
print (s.index('p'))
6
print (s.rindex('p'))
15
print (s.rfind('p'))

3

more_itertoolsHer şeyden indeksleri bulmak için kütüphane teklifler araçları karakterleri veya tüm alt dizeleri .

verilmiş

import more_itertools as mit


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

kod

Karakterler

Şimdi mevcut rlocatearaç var:

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

Tamamlayıcı bir araç locate:

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

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

altdizgelerin

window_sizeBirkaç öğenin başındaki öğeyi bulmak için bir parametre de vardır :

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

Etkin olmayan bir yayını yeniden diriltmeye çalışmıyorum, ancak bu henüz gönderilmediğinden ...

(Bu soruyu bulmadan önce ben böyle yaptım)

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

Açıklama: Son örneği ararken, gerçekten ters dize içindeki ilk örneği arıyorsunuz. Bunu bilerek, s[::-1](ters bir dize döndürür) yaptım ve oradan dizine target. Sonra yaptım len(s) - 1 - the index foundçünkü indeks geri dönüştürülmemiş (yani orijinal) dize istiyorum.

Yine de dikkat edin! Birden targetfazla karakterse, büyük olasılıkla ters çevrilmiş dizede bulamazsınız. Bu, kullanım düzeltmek için last_pos = len(s) - 1 - s[::-1].index(target[::-1])bir ters versiyonu için, hangi aramalar target.


1
Bu cevabı iptal ettim, çünkü orijinal soru için çok yararlı olmasa da, genel olarak ilginç ve eğiticiydi. Bence Python'un öğrenmesinin çoğu böyle.
Bill Evans Mariposa'da

1

Eğer rfind kullanmak istemiyorsanız , bu hile yapacaktır /

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()dizedeki bir karakterin son tekrarlamasını almak için işlevi kullanabilirsiniz

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

0

Python String rindex () Yöntemi

Açıklama
Python string yöntemi rindex (), alt dize str'nin bulunduğu son dizini döndürür veya böyle bir dizin yoksa isteğe bağlı olarak aramayı dizgiyle [beg: end] kısıtlar.

Sözdizimi
Aşağıda rindex () yönteminin sözdizimi verilmiştir -

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

Parametreler
str - Bu, aranacak dizeyi belirtir.

beg - Bu başlangıç ​​dizinidir, varsayılan olarak 0

len - Bu bitiş endeksidir, varsayılan olarak dizenin uzunluğuna eşittir.

Dönüş Değeri
Bu yöntem, aksi takdirde bulunmazsa son dizini döndürür.

Örnek
Aşağıdaki örnek, rindex () yönteminin kullanımını gösterir.

Canlı Demo

! / Usr / bin / python

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

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

Programın üzerinde çalıştığımızda aşağıdaki sonucu üretir -

5
2

Ref: Python String rindex () Yöntemi - Tutorialspoint

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.