Bagaimana saya bisa mendapatkan posisi karakter di dalam string dengan python?
527
Ada dua metode string untuk ini, find()
dan index()
. Perbedaan antara keduanya adalah apa yang terjadi ketika string pencarian tidak ditemukan. find()
kembali -1
dan index()
menaikkan ValueError
.
find()
>>> myString = 'Position of a character'
>>> myString.find('s')
2
>>> myString.find('x')
-1
index()
>>> myString = 'Position of a character'
>>> myString.index('s')
2
>>> myString.index('x')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
string.find(s, sub[, start[, end]])
Kembalikan indeks terendah dalam s di mana sub substring ditemukan sedemikian sehingga sub sepenuhnya terkandung dalams[start:end]
. Pengembalian-1
gagal. Default untuk awal dan akhir dan interpretasi nilai-nilai negatif sama dengan irisan.
Dan:
string.index(s, sub[, start[, end]])
Sukafind()
tetapi naikkanValueError
ketika substring tidak ditemukan.
Hanya demi kelengkapan, jika Anda perlu menemukan semua posisi karakter dalam sebuah string, Anda dapat melakukan hal berikut:
s = 'shak#spea#e'
c = '#'
print [pos for pos, char in enumerate(s) if char == c]
yang akan kembali [4, 9]
print( [pos for pos, char in enumerate(s) if char == c])
foo = ( [pos for pos, char in enumerate(s) if char == c])
akan meletakkan koordinat foo dalam format daftar. Saya merasa ini sangat membantuCara "Panjang lebar"
untuk mendapatkan substring,
sumber
str[from:to]
wherefrom
andto
are indexesHanya untuk penyelesaian, dalam hal saya ingin mencari ekstensi dalam nama file untuk memeriksanya, saya harus mencari yang terakhir '.', Dalam hal ini gunakan rfind:
dalam kasus saya, saya menggunakan yang berikut ini, yang berfungsi apa pun nama file lengkapnya adalah:
sumber
left = q.find("{"); right = q.rfind("}")
.Apa yang terjadi ketika string berisi karakter duplikat? dari pengalaman saya dengan
index()
saya melihat bahwa untuk duplikat Anda mendapatkan kembali indeks yang sama.Sebagai contoh:
akan kembali:
Dalam hal ini Anda dapat melakukan sesuatu seperti itu:
sumber
enumerate
lebih baik untuk hal semacam itu.Mungkin Anda ingin melihat dokumentasi untuk mencari tahu apa perbedaan antara keduanya.
sumber
Karakter mungkin muncul beberapa kali dalam sebuah string. Misalnya dalam string
sentence
, posisie
is1, 4, 7
(karena pengindeksan biasanya dimulai dari nol). tetapi apa yang saya temukan adalah kedua fungsifind()
danindex()
mengembalikan posisi pertama karakter. Jadi, ini bisa diselesaikan dengan melakukan ini:sumber
more_itertools.locate
adalah alat pihak ketiga yang menemukan semua indeks item yang memenuhi syarat.Di sini kita menemukan semua lokasi indeks surat itu
"i"
.sumber
Solusi dengan numpy untuk akses cepat ke semua indeks:
sumber