Bagaimana menemukan indeks huruf serupa berikutnya dalam sebuah string [duplikat]

a = "programming in python is Fun"

a.find("i") = 8

Ia mengembalikan indeks kemunculan pertama "i" di a.
Apakah mungkin menemukan indeks "i" kedua?


person sunit patil    schedule 03.02.2021    source sumber
comment
Ya, lihat perilaku metode indeks. docs.python.org/3/library/   -  person lllrnr101    schedule 03.02.2021


Jawaban (3)


find() juga mengambil indeks awal opsional yang dapat Anda gunakan sebagai:

a = "programming in python is Fun"
first = a.find('i')
print(a.find('i',first+1))
person Krishna Chaurasia    schedule 03.02.2021

Anda dapat menggunakan enumerate() dengan pemahaman daftar untuk menemukan semua indeks sebagai:

s = "programming in python is Fun"
my_char = "i"

my_indexes = [i for i, x in enumerate(s) if x == my_char]
# where `my_indexes` holds:
#    [8, 12, 22]

Di sini my_char adalah karakter yang ingin Anda cari indeksnya. Dan my_indexes adalah daftar yang berisi indeks setiap kali my_char ditemukan dalam string. Silakan lihat enumerate() dokumen untuk detail lebih lanjut.

Oleh karena itu, Anda dapat mengakses indeks kemunculan kedua sebagai:

>>> my_indexes[1]
12
person Anonymous    schedule 03.02.2021
comment
yang itu sangat keren. mungkin tidak secepat .find() di atas kertas, tapi menurut saya algo lebih baik. Jika saya boleh, hapus , x in enumerate itu, ì for i in s akan baik-baik saja, string hanyalah daftar karakter. - person Loïc; 03.02.2021

Anda juga dapat menggunakan numpy dengan cara berikut:

import numpy as np
a = "programming in python is Fun"
x = np.frombuffer(a.encode(), dtype=np.uint8)
np.where(x == ord('i')) # (array([ 8, 12, 22]),)

Menggunakan np.frombuffer menafsirkan ulang str sebagai buffer char dan kemudian menggunakan < a href="https://numpy.org/doc/stable/reference/generated/numpy.where.html" rel="nofollow noreferrer">np.where akan mengembalikan semua indeks yang cocok dengan karakter Anda tertarik (atau lebih tepatnya bilangan bulat yang mewakili karakter Unicode, menggunakan ord< /a>).

person David    schedule 03.02.2021
comment
bukankah memuat numpy agak berat untuk tugas itu? - person Loïc; 03.02.2021
comment
@Loïc Ini mungkin berlebihan, tetapi jika Anda memiliki string yang sangat panjang, saya rasa ini akan menjadi yang tercepat. Tentu saja, saya juga ingin memberikan pendekatan lain terhadap pendekatan yang diberikan. - person David; 03.02.2021