2011-10-05 16 views
7

varsayalım ben kelime "internet" harfi 'e' her indeksini bulmak zorunda:Bulma endeksi

letter = 'e' 
word = 'internet' 
idx = word.index(letter) 

Ama bu kod sadece ilk indeks verir. Geri kalanını nasıl bulabilirim? Bir list comprehension içinde enumerate kullanılarak

+2

bir 'string', değil bir 'liste'. – Johnsyweb

+0

Merak, sormamı zorluyor, neden endeksleri istiyorsun? –

+1

Evet, benim hatam. Tabii ki bir dize ... Ben cellat oyunu kodluyorum. – markiisi

cevap

6

Mark's answer tek harf için daha iyidir. Bunu, gerçek alt dizenizin tek bir karakterden uzun olması durumunda ekliyorum.

Eğer str.index() kullanmak istiyorsanız istenen alt dize bulunmazsa, bu isteğe bağlı bir start pozisyon alabilir ve bir ValueErrorraise olacaktır:

tabii burada 'kelime' Of
>>> letter = 'e' 
>>> word = 'internet' 
>>> last_index = -1 
>>> while True: 
...  try: 
...   last_index = word.index(letter, last_index + 1) 
...   print last_index 
...  except ValueError: 
...   break 
... 
3 
6 
+2

Eğer bunu kullanacaksanız, bunu indeksleri üreten bir jeneratör fonksiyonuna yapıştırmanızı öneriyorum. – yak

+0

@yak: oldukça katılıyorum. Sadece basit bir örnek veriyordum. – Johnsyweb

13

Dene:

[index for (index, letter) in enumerate(word) if letter == 'e'] 
0

bu deneyin:

word = 'internet' 
letter = 'e' 
[i for i in xrange(len(word)) if word[i] == letter]