Setelah mampu membuat dan menggabungkan string, kebutuhan berikutnya adalah mengambil bagian dari string: huruf pertama sebuah nama, domain dari alamat email, atau empat digit terakhir sebuah nomor kartu. Python menyediakan dua mekanisme untuk kebutuhan tersebut: indexing untuk mengambil satu karakter dan slicing untuk mengambil rentang karakter. Kedua mekanisme ini juga berlaku pada list dan tuple, jadi menguasainya sekarang akan terbayar di sepanjang Course Python.

Mengakses Karakter dengan Indexing #

Setiap karakter pada string memiliki nomor posisi yang disebut index, dan penghitungan dimulai dari 0, bukan 1. Python juga menyediakan negative index yang berhitung dari belakang string, dengan karakter terakhir bernomor -1. Tabel berikut memetakan kedua jenis index untuk string "Python":

KarakterPython
Index positif012345
Index negatif-6-5-4-3-2-1

Kita mengakses karakter dengan menuliskan nomor index di dalam tanda kurung siku setelah variabel:

python
kata = "Python"

print(kata[0])
print(kata[1])
print(kata[-1])
print(kata[-2])
print(len(kata))

Output yang Dihasilkan:

text
P
y
n
o
6

Mari kita bedah baris-barisnya:

  1. Baris 3 (kata[0]): interpreter membaca karakter pada posisi 0, yaitu P — karakter pertama selalu berindex 0.
  2. Baris 4 (kata[1]): posisi 1 berisi y; jarak antara posisi dan kenyataan manusia yang mulai menghitung dari satu adalah sumber kebingungan paling umum bagi pemula.
  3. Baris 5-6 (kata[-1], kata[-2]): negative index berhitung dari belakang; kata[-1] adalah karakter terakhir n, kata[-2] karakter kedua dari belakang o.
  4. Baris 7 (len(kata)): fungsi len() mengembalikan jumlah karakter, 6; index sah terbesar dengan demikian adalah 5.

Slicing: Mengambil Rentang Karakter #

Indexing hanya menghasilkan satu karakter. Untuk mengambil beberapa karakter sekaligus, kita menggunakan slicing dengan format teks[start:stop]. Ada satu aturan penting yang harus dihafal: index start ikut diambil, sedangkan index stop tidak ikut diambil.

python
kata = "Python"

print(kata[0:3])
print(kata[2:])
print(kata[:4])
print(kata[:])

Output yang Dihasilkan:

text
Pyt
thon
Pyth
Python

Mari kita telaah setiap baris:

  1. Baris 3 (kata[0:3]): mengambil index 0, 1, dan 2 — berhenti sebelum index 3. Hasilnya "Pyt" yang terdiri dari tiga karakter.
  2. Baris 4 (kata[2:]): stop dikosongkan berarti sampai akhir string; hasilnya "thon" mulai dari index 2.
  3. Baris 5 (kata[:4]): start dikosongkan berarti dari index 0; hasilnya "Pyth" sebelum index 4.
  4. Baris 6 (kata[:]): keduanya kosong menghasilkan salinan seluruh string.

Step dan Slicing Terbalik #

Slicing punya bentuk lengkap: teks[start:stop:step]. Nilai step defaultnya 1 (ambil semua karakter berurutan). Nilai 2 berarti lompat satu karakter setiap kali bergerak, dan nilai negatif membuat pembacaan berjalan dari kanan ke kiri:

python
kota = "Jakarta"

print(kota[0:6:2])
print(kota[::2])
print(kota[::-1])
print(kota[5:1:-2])

Output yang Dihasilkan:

text
Jkr
Jkra
atrakaJ
ta

Perhatikan perilaku masing-masing:

  1. kota[0:6:2]: bergerak dari index 0 menuju sebelum index 6 dengan langkah 2, sehingga yang diambil index 0, 2, dan 4 — karakter J, k, r.
  2. kota[::2]: seluruh string dengan langkah 2; index 0, 2, 4, 6 menghasilkan Jkra.
  3. kota[::-1]: langkah -1 tanpa batas berarti membaca seluruh string dari belakang — idiom paling ringkas untuk membalik string di Python.
  4. kota[5:1:-2]: dengan step negatif, start harus lebih besar dari stop; pembacaan mulai index 5 mundur sampai melewati index 2, mengambil index 5 dan 3 — karakter t dan a.

Index di Luar Jangkauan #

Indexing dan slicing berperilaku sangat berbeda terhadap index yang melebihi panjang string. Indexing menolak keras dengan IndexError, sedangkan slicing diam-diam memotong sebatas yang tersedia:

python
>>> kata = "Python"
>>> kata[10]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> kata[2:10]
'thon'

Ekspresi kata[2:10] tidak error karena aturan slicing berhenti sendiri di karakter terakhir yang ada. Perilaku toleran ini memudahkan kita memotong string tanpa harus menghitung panjangnya terlebih dahulu.

Dengan indexing dan slicing, kita kini bisa membedah string pada tingkat karakter. Selanjutnya kita berkenalan dengan kumpulan method str yang mengubah, membersihkan, dan memeriksa string dalam satu panggilan.