Bir python dizesindeki bir alt dizenin ilk oluşumunu nasıl bulabilirim?


123

Yani eğer benim dizim "bu adam havalı bir adam" ise.
"Dostum" un ilk dizinini bulmak istiyorum:

mystring.findfirstindex('dude') # should return 4

Bunun için python komutu nedir?
Teşekkürler.

Yanıtlar:


213

find()

>>> s = "the dude is a cool dude"
>>> s.find('dude')
4

20
Bu döndürür -1bulunmazsa eğer
Christophe ROUSSY

iscümledeki kelimeyi bulmak istersem ne olur this is a cool dude? Find yöntemini denedim ama 5 yerine dizin 2 döndürüyor. Bunu find () kullanarak nasıl başarabilirim?
regresör

@Regressor: Normal ifadeye ve kelime sınırlarına bakın.
mechanical_meat

28

Hızlı Genel Bakış: indexvefind

Yanındaki findbir yöntem de yoktur index. findve indexher ikisi de aynı sonucu verir: ilk oluşumun konumunu döndürmek, ancak hiçbir şey bulunmazsa index, a ValueErrorwhile finddöndürür -1. Hız açısından her ikisi de aynı kıyaslama sonuçlarına sahiptir.

s.find(t)    #returns: -1, or index where t starts in s
s.index(t)   #returns: Same as find, but raises ValueError if t is not in s

Ek bilgi: rfindve rindex:

Genel olarak, bulmak ve dizin geçti-string başlar en küçük indeksi dönün ve rfindve rindexbu arama algoritmaları gelen arama dize çoğu başlar büyük dizin dönmek soldan sağa başlayarak fonksiyonları böylece, rarama bulunsa belirtmek sağ sola .

Dolayısıyla, aradığınız öğenin olasılığının listenin başlangıcına göre sona yakın olması rfindveya rindexdaha hızlı olması durumunda.

s.rfind(t)   #returns: Same as find, but searched right to left
s.rindex(t)  #returns: Same as index, but searches right to left

Kaynak: Python: Visual QuickStart Guide, Toby Donaldson


dizge olarak tanımlanmışsa input_string = "this is a sentence"ve sözcüğün ilk geçtiği yeri bulmak istiyorsak is, o zaman işe yarayacak mı? # first occurence of word in a sentence input_string = "this is a sentence" # return the index of the word matching_word = "is" input_string.find("is")
00'te regresör

1

herhangi bir python dahili işlevi kullanmayarak bunu algoritmik bir şekilde uygulamak için. Bu şu şekilde uygulanabilir:

def find_pos(string,word):

    for i in range(len(string) - len(word)+1):
        if string[i:i+len(word)] == word:
            return i
    return 'Not Found'

string = "the dude is a cool dude"
word = 'dude1'
print(find_pos(string,word))
# output 4

0
def find_pos(chaine,x):

    for i in range(len(chaine)):
        if chaine[i] ==x :
            return 'yes',i 
    return 'no'

6
Görünüşe göre girintiniz kapalı ve tırnak işaretlerinizi kapatmayı unuttunuz. Kodunuzun açıklaması ve neden sorunu çözeceği de yararlıdır; bkz Cevap Nasıl
Camille

üzgünüm onu ​​düzenledim ... kodum dizedeki bir harfin ilk
geçtiği

0

verse = "Her şey seninle ilgiliyken kafanı tutabiliyorsan \ n Onları kaybediyor ve seni suçluyorsan, \ nEğer herkes senden şüphe ettiğinde kendine güvenebilirsen, \ n Ama onların şüphelerini de hesaba kat; \ nEğer yapabilirsen bekle ve bekleyerek yorulma, \ n Veya yalan söylenerek, yalanlarla uğraşma, \ nYa da nefret edilme, nefrete yer verme \ n Yine de çok iyi görünme ve çok akıllıca konuşma :"

enter code here

print(verse)
#1. What is the length of the string variable verse?
verse_length = len(verse)
print("The length of verse is: {}".format(verse_length))
#2. What is the index of the first occurrence of the word 'and' in verse?
index = verse.find("and")
print("The index of the word 'and' in verse is {}".format(index))

Stack Overflow'a hoş geldiniz. Daha fazla bilgi veya daha iyi bir açıklama vermeden eski ve önceden cevaplanmış bir soruyu (yeşil onay işaretiyle cevap) yanıtlıyorsunuz. Yani temelde sadece kabul edilen cevabı kopyalar . İyi bir cevabı nasıl yazarım? . (Daha fazla referans için, popüler sorularda geç tekrarlanan cevapların ('sörf yapma') temizliğinin nasıl yapılacağına bir göz atın ).
Ivo Mori
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.