Bagaimana saya bisa mendapatkan posisi karakter dalam string di python?
Ada dua metode string untuk ini, find()
dan index()
. Perbedaan antara keduanya adalah apa yang terjadi ketika pencarian string isn't menemukan. find()
mengembalikan -1
dan index()
mengangkat 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.menemukan(s, sub[, start[, end]])
Return indeks terendah di s mana substring sub ditemukan seperti yang sub sepenuhnya terkandung dalams[awal:akhir]
. Kembali-1
pada kegagalan. Default untuk start dan end dan interpretasi dari nilai-nilai negatif adalah sama seperti untuk irisan.
Dan:
string.indeks(s, sub[, start[, end]])
Sepertifind()
tetapi menaikkanValueError
jika substring tidak ditemukan.
Hanya untuk kepentingan kelengkapan, jika anda perlu untuk menemukan semua posisi karakter dalam string, anda dapat melakukan hal-hal berikut:
s = 'shak#spea#e'
c = '#'
print [pos for pos, char in enumerate(s) if char == c]
yang akan kembali [4, 9]
>>> s="mystring"
>>> s.index("r")
4
>>> s.find("r")
4
"Panjang lebar" cara
>>> for i,c in enumerate(s):
... if "r"==c: print i
...
4
untuk mendapatkan substring,
>>> s="mystring"
>>> s[4:10]
'ring'
Apa yang terjadi ketika string berisi duplikat karakter?
dari pengalaman saya dengan index()
saya melihat bahwa untuk menduplikasi anda mendapatkan kembali indeks yang sama.
Misalnya:
s = 'abccde'
for c in s:
print('%s, %d' % (c, s.index(c)))
akan kembali:
a, 0
b, 1
c, 2
c, 2
d, 4
Dalam hal ini anda dapat melakukan sesuatu seperti itu:
for i, character in enumerate(my_string):
# i is the position of the character in the string
Hanya untuk penyelesaian, dalam hal ini saya ingin untuk menemukan ekstensi pada nama file untuk memeriksa hal ini, saya perlu untuk menemukan yang lalu '.', dalam hal ini menggunakan rfind:
path = 'toto.titi.tata..xls'
path.find('.')
4
path.rfind('.')
15
dalam kasus saya, saya menggunakan berikut, yang bekerja dengan nama lengkap file adalah:
filename_without_extension = complete_name[:complete_name.rfind('.')]
string.find(character)
string.index(character)
Mungkin anda'd ingin melihat dokumentasi untuk mengetahui apa perbedaan antara keduanya adalah.
Karakter mungkin muncul beberapa kali dalam sebuah string. Misalnya dalam sebuah string kalimat
, posisi e
adalah 1, 4, 7
(karena pengindeksan biasanya dimulai dari nol). tapi apa yang saya temukan adalah kedua fungsi cari()
dan index()
kembali posisi pertama dari karakter. Sehingga, hal ini dapat diatasi dengan melakukan hal ini:
def charposition(string, char):
pos = [] #list to store positions for each 'char' in 'string'
for n in range(len(string)):
if string[n] == char:
pos.append(n)
return pos
s = "sentence"
print(charposition(s, 'e'))
#Output: [1, 4, 7]
more_itertools.cari
adalah sebuah alat pihak ketiga yang menemukan semua indicies item yang memenuhi syarat.
Di sini kita menemukan semua indeks lokasi dari huruf "aku"
.
import more_itertools as mit
s = "supercalifragilisticexpialidocious"
list(mit.locate(s, lambda x: x == "i"))
# [8, 13, 15, 18, 23, 26, 30]