Bagaimana saya bisa mendapatkan posisi karakter di dalam string dengan python?
Bagaimana saya bisa mendapatkan posisi karakter di dalam string dengan python?
Jawaban:
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 membantu
>>> s="mystring"
>>> s.index("r")
4
>>> s.find("r")
4
Cara "Panjang lebar"
>>> for i,c in enumerate(s):
... if "r"==c: print i
...
4
untuk mendapatkan substring,
>>> s="mystring"
>>> s[4:10]
'ring'
str[from:to]
where from
and to
are indexes
Hanya untuk penyelesaian, dalam hal saya ingin mencari ekstensi dalam nama file untuk memeriksanya, saya harus mencari yang terakhir '.', Dalam hal ini gunakan rfind:
path = 'toto.titi.tata..xls'
path.find('.')
4
path.rfind('.')
15
dalam kasus saya, saya menggunakan yang berikut ini, yang berfungsi apa pun nama file lengkapnya adalah:
filename_without_extension = complete_name[:complete_name.rfind('.')]
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:
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
enumerate
lebih baik untuk hal semacam itu.
string.find(character)
string.index(character)
Mungkin Anda ingin melihat dokumentasi untuk mencari tahu apa perbedaan antara keduanya.
Karakter mungkin muncul beberapa kali dalam sebuah string. Misalnya dalam string sentence
, posisi e
is 1, 4, 7
(karena pengindeksan biasanya dimulai dari nol). tetapi apa yang saya temukan adalah kedua fungsi find()
dan index()
mengembalikan posisi pertama karakter. Jadi, ini bisa diselesaikan dengan melakukan 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.locate
adalah alat pihak ketiga yang menemukan semua indeks item yang memenuhi syarat.
Di sini kita menemukan semua lokasi indeks surat itu "i"
.
import more_itertools as mit
s = "supercalifragilisticexpialidocious"
list(mit.locate(s, lambda x: x == "i"))
# [8, 13, 15, 18, 23, 26, 30]
Solusi dengan numpy untuk akses cepat ke semua indeks:
string_array = np.array(list(my_string))
char_indexes = np.where(string_array == 'C')