For AI agents: use /llms.txt for the Nakafa content index.
Indexing adalah cara untuk mengakses elemen tertentu dalam string atau list dengan menggunakan nomor posisi. Bayangkan kamu memiliki deretan buku di rak, dan setiap buku memiliki nomor urut. Indexing memungkinkan kamu mengambil buku tertentu berdasarkan nomor urutnya.
Python menggunakan sistem penomoran yang dimulai dari , bukan . Jadi elemen pertama memiliki indeks , elemen kedua memiliki indeks , dan seterusnya. Selain itu, Python juga mendukung indeks negatif yang menghitung mundur dari akhir.
Dalam string atau list, setiap karakter atau elemen memiliki dua jenis indeks. Indeks positif dimulai dari di awal, sedangkan indeks negatif dimulai dari di akhir.
# Contoh indexing pada string
s = "Hello"
# Mengakses karakter dengan indeks positif
print(s[0]) # Output: 'H'
print(s[4]) # Output: 'o'
# Mengakses karakter dengan indeks negatif
print(s[-1]) # Output: 'o' (karakter terakhir)
print(s[-5]) # Output: 'H' (karakter pertama)
# Mencoba mengakses indeks yang tidak ada
try:
print(s[5])
except IndexError:
print("IndexError: indeks di luar jangkauan")Indeks di luar rentang yang valid menghasilkan IndexError. Sequence Python melakukan pemeriksaan batas ini dan tidak mengembalikan nilai sembarang.
Slicing memungkinkan kamu mengambil bagian tertentu dari string atau list, bukan hanya satu elemen. Ini seperti memotong sepotong roti dari roti utuh, kamu bisa menentukan dari mana mulai memotong dan di mana berhenti.
Sintaks dasar slicing menggunakan format [i:j] di mana i adalah indeks awal dan j adalah indeks akhir. Penting untuk diingat bahwa indeks akhir tidak termasuk dalam hasil.
# Contoh slicing pada string
s = "Hello"
# Slicing dari indeks 1 sampai 3 (tidak termasuk 3)
print(s[1:3]) # Output: 'el'
# Slicing dari indeks 3 sampai akhir
print(s[3:]) # Output: 'lo'
# Slicing dari awal sampai indeks 3
print(s[:3]) # Output: 'Hel'
# Slicing dengan indeks negatif
print(s[-4:-2]) # Output: 'el'
print(s[-2:-4]) # Output: '' (string kosong)Ketika indeks awal lebih besar dari indeks akhir dalam slicing biasa, hasilnya adalah string atau list kosong. Ini berbeda dengan slicing menggunakan stride negatif.
Stride adalah parameter ketiga dalam slicing yang menentukan langkah atau jarak antar elemen yang diambil. Stride memungkinkan kamu mengambil elemen dengan pola tertentu.
# Contoh slicing dengan stride
s = "Hello World!"
# Mengambil setiap karakter kedua
print(s[::2]) # Output: 'HloWrd'
# Mengambil setiap karakter kedua dari indeks 1
print(s[1::2]) # Output: 'el ol!'
# Membalik string dengan stride negatif
print(s[::-1]) # Output: '!dlroW olleH'
# Slicing dengan stride negatif dari indeks tertentu
print(s[-1:4:-1]) # Output: '!dlroW'Stride negatif sangat berguna untuk membalik urutan elemen. Ketika stride bernilai , Python akan mengambil semua elemen dari akhir ke awal.
Slicing memiliki beberapa properti penting yang perlu dipahami untuk menghindari kesalahan dalam penggunaan.
Untuk kasus sederhana dengan step positif bawaan, panjang s[i:j] adalah . Slice umum dapat memiliki batas kosong, negatif, atau di luar rentang serta step berbeda. Python menormalisasinya terhadap panjang sequence. Jumlah persisnya adalah len(range(*slice(i, j, step).indices(len(s)))).
# Menghitung panjang hasil slicing
s = "Hello"
# Slicing s[1:4]
result = s[1:4]
print(f"Hasil: '{result}', Panjang: {len(result)}") # Output: 'ell', 3
# Membuktikan bahwa s[:i] + s[i:] == s
i = 2
left_part = s[:i]
right_part = s[i:]
print(f"'{left_part}' + '{right_part}' = '{left_part + right_part}'")
# Slicing di luar batas tidak menyebabkan error
print(s[3:10]) # Output: 'lo'
print(s[10:]) # Output: '' (string kosong)Salah satu keunggulan slicing adalah tidak akan menyebabkan error meskipun indeks melebihi panjang string atau list. Python secara otomatis menyesuaikan batas yang valid.
Indeks yang dipilih sebuah slice dapat dimodelkan dengan range(). Model ini menjelaskan hasilnya tanpa menganggap setiap tipe sequence mengimplementasikan slicing sebagai loop Python.
# Memahami slicing sebagai loop
s = "Hello World!"
# s[1:8:2] equivalent dengan loop berikut:
result_manual = ""
for index in range(1, 8, 2):
result_manual += s[index]
result_slicing = s[1:8:2]
print(f"Manual loop: '{result_manual}'") # Output: 'el o'
print(f"Slicing: '{result_slicing}'") # Output: 'el o'
print(f"Sama? {result_manual == result_slicing}") # Output: True
# Contoh dengan stride negatif
print("\nStride negatif:")
print(f"s[::-2] = '{s[::-2]}'") # Output: '!lo le'
# Equivalent manual loop untuk stride negatif
result_negative = ""
for index in range(len(s)-1, -1, -2):
result_negative += s[index]
print(f"Manual: '{result_negative}'")Membandingkan slice dengan model range() memperlihatkan aturan start, stop, dan step, terutama ketika step bernilai negatif.
Python menyediakan beberapa cara singkat untuk melakukan slicing yang sering digunakan.
Kamu dapat mengosongkan parameter awal atau akhir untuk mengambil elemen dari awal atau sampai akhir string/list.
# Variasi slicing yang berguna
s = "Hello"
# Mengambil 3 karakter pertama
print(s[:3]) # Output: 'Hel'
# Mengambil karakter dari indeks 3 sampai akhir
print(s[3:]) # Output: 'lo'
# Mengambil semua karakter
print(s[:]) # Output: 'Hello'
# Contoh praktis dengan list
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Mengambil 5 elemen pertama
first_five = numbers[:5]
print(f"Lima pertama: {first_five}")
# Mengambil 5 elemen terakhir
last_five = numbers[-5:]
print(f"Lima terakhir: {last_five}")
# Mengambil elemen tengah (skip 2 pertama dan 2 terakhir)
middle = numbers[2:-2]
print(f"Bagian tengah: {middle}")Variasi slicing ini sangat berguna dalam pemrosesan data ketika kamu perlu mengambil bagian tertentu dari dataset besar.
Indexing dan slicing sering digunakan dalam berbagai skenario pemrograman, mulai dari manipulasi string hingga pemrosesan data.
# Contoh aplikasi praktis indexing dan slicing
# 1. Membalik nama
nama_depan = "Ahmad"
nama_belakang = "Wijaya"
nama_terbalik = (nama_depan + " " + nama_belakang)[::-1]
print(f"Nama terbalik: {nama_terbalik}")
# 2. Mengambil ekstensi file dengan aman
from pathlib import Path
nama_file = "dokumen_penting.pdf"
ekstensi = Path(nama_file).suffix
print(f"Ekstensi: {ekstensi}")
# 3. Memformat nomor telepon
nomor = "081234567890"
formatted = f"{nomor[:4]}-{nomor[4:8]}-{nomor[8:]}"
print(f"Nomor terformat: {formatted}")
# 4. Mengambil inisial nama
nama_lengkap = "Siti Nurhaliza Binti Ahmad"
kata_kata = nama_lengkap.split()
inisial = ""
for kata in kata_kata:
inisial += kata[0]
print(f"Inisial: {inisial}")
# 5. Palindrome checker
def is_palindrome(text):
cleaned = "".join(character for character in text.casefold() if character.isalnum())
return cleaned == cleaned[::-1]
print(f"'katak' palindrome? {is_palindrome('katak')}")
print(f"'kasur rusak' palindrome? {is_palindrome('kasur rusak')}")Contoh-contoh ini memakai indexing ketika posisinya diketahui dan slicing ketika yang dibutuhkan adalah subsequence berurutan atau berjarak tetap. Membalik sequence dengan [::-1] memang ringkas. Ekstensi file berbeda karena panjangnya bervariasi, sehingga Path.suffix menyatakan aturan domain itu lebih andal daripada slice tetap.
Batas slice dipotong ke rentang sequence, sehingga s[10:] pada string yang lebih pendek menghasilkan "", bukan IndexError. Indexing langsung seperti s[10] tetap menghasilkan error. Pilih berdasarkan apakah elemen yang tidak ada merupakan kesalahan atau subsequence kosong memang bermakna.
Penguasaan indeks negatif memberikan perspektif baru dalam mengakses data. Alih-alih menghitung dari depan, kamu bisa langsung mengambil elemen dari belakang dengan s[-1] untuk elemen terakhir atau s[-3:] untuk tiga elemen terakhir. Pendekatan ini sangat berguna dalam pemrosesan file, parsing teks, dan manipulasi dataset di mana posisi relatif dari akhir lebih penting daripada posisi absolut dari awal.