For AI agents: use /llms.txt for the Nakafa content index.
Dalam Python, iterable adalah objek yang dapat menghasilkan satu item demi satu untuk perulangan atau pemakai lain. String, list, tuple, set, dictionary, file, dan generator semuanya iterable meskipun cara menyusun serta menghasilkan itemnya berbeda.
Iterable tidak harus berurutan, memiliki indeks, dapat dipakai ulang, atau berhingga. Janji utamanya lebih sempit: iter() dapat memperoleh iterator yang memasok item sampai habis.
Python menyediakan berbagai jenis iterable yang sering kamu gunakan dalam pemrograman sehari-hari.
# String sebagai iterable
text = "hello"
print("Karakter dalam string:")
for char in text:
print(char)
# Output:
# Karakter dalam string:
# h
# e
# l
# l
# o
print()
# List sebagai iterable
numbers = [1, 2, 3, 4, 5]
print("Elemen dalam list:")
for num in numbers:
print(num)
# Output:
# Elemen dalam list:
# 1
# 2
# 3
# 4
# 5
print()
# Tuple sebagai iterable
coordinates = (10, 20, 30)
print("Elemen dalam tuple:")
for coord in coordinates:
print(coord)
# Output:
# Elemen dalam tuple:
# 10
# 20
# 30String menghasilkan karakter sesuai urutan teks. List dan tuple menghasilkan elemen tersimpan sesuai urutan posisi. Jenis iterable lain dapat memiliki aturan urutan yang berbeda.
Operator in dan not in menanyakan apakah suatu container memuat nilai tertentu. Aturan keanggotaan tepatnya dimiliki oleh tipe container tersebut.
Sequence bawaan memeriksa item hingga menemukan kecocokan atau mencapai akhir. Set dan dictionary memakai mekanisme pencariannya sendiri, dan pemeriksaan keanggotaan dictionary berlaku pada kunci, bukan nilai.
# Pengecekan keanggotaan dalam list
fruits = ["apel", "jeruk", "mangga"]
# Menggunakan operator in
if "apel" in fruits:
print("Apel tersedia dalam daftar buah")
# Output: Apel tersedia dalam daftar buah
# Menggunakan operator not in
if "durian" not in fruits:
print("Durian tidak tersedia dalam daftar buah")
# Output: Durian tidak tersedia dalam daftar buah
print()
# Pengecekan keanggotaan dalam string
message = "Python adalah bahasa pemrograman"
# Mencari substring dalam string
if "Python" in message:
print("Kata Python ditemukan dalam pesan")
# Output: Kata Python ditemukan dalam pesan
if "Java" not in message:
print("Kata Java tidak ditemukan dalam pesan")
# Output: Kata Java tidak ditemukan dalam pesanUntuk string, operand kiri dapat berupa satu karakter atau substring yang lebih panjang. Pemeriksaannya peka huruf besar-kecil dan mencari satu kemunculan yang berurutan.
# Pengecekan karakter dalam string
text = "programming"
# Mencari karakter tunggal
print("g" in text) # Output: True
print("z" in text) # Output: False
print()
# Mencari substring dalam string
print("gram" in text) # Output: True
print("program" in text) # Output: True
print("java" in text) # Output: False
# Pemeriksaan penanda saja, bukan validasi email lengkap
email = "user@example.com"
if "@" in email and ".com" in email:
print("Memuat penanda dasar email")
# Output: Memuat penanda dasar emailPemeriksaan terakhir hanya menunjukkan dua penanda. Cara itu belum cukup untuk memvalidasi email karena banyak alamat tidak valid memuat @ dan .com, sedangkan banyak alamat valid memakai akhiran domain lain.
Fungsi bawaan any() dan all() memakai iterable dan menguji truthiness setiap item. Keduanya berhenti segera setelah hasilnya diketahui, sehingga generator expression menghindari pembuatan list perantara yang tidak diperlukan.
any() mengembalikan True setelah menemukan item truthy pertama. Hasilnya baru False ketika semua item falsy atau iterable kosong.
# Contoh penggunaan any()
grades = [60, 75, 45, 80]
# Cek apakah ada nilai di atas 70
print("Ada nilai tinggi:", any(grade > 70 for grade in grades))
# Output: Ada nilai tinggi: True
# Contoh dengan boolean langsung
conditions = [False, False, True, False]
print("Ada kondisi yang benar:", any(conditions))
# Output: Ada kondisi yang benar: True
# Contoh dengan list kosong
empty_list = []
print("Any pada list kosong:", any(empty_list))
# Output: Any pada list kosong: False
# Contoh praktis
numbers = [0, 0, 5, 0]
if any(numbers):
print("Ada angka selain nol dalam list")
# Output: Ada angka selain nol dalam listall() mengembalikan False setelah menemukan item falsy pertama. Jika iterasi selesai tanpa item tersebut, hasilnya True. Ini juga menjelaskan kasus kosong: tidak ada item yang melanggar kondisi.
# Contoh penggunaan all()
scores = [85, 90, 78, 92]
# Cek apakah semua nilai di atas 70
print("Semua nilai lulus:", all(score >= 70 for score in scores))
# Output: Semua nilai lulus: True
# Contoh dengan boolean langsung
conditions = [True, True, True, True]
print("Semua kondisi benar:", all(conditions))
# Output: Semua kondisi benar: True
# Contoh dengan satu kondisi false
mixed_conditions = [True, True, False, True]
print("Semua kondisi benar:", all(mixed_conditions))
# Output: Semua kondisi benar: False
# Contoh praktis
ages = [18, 21, 25, 30]
if all(age >= 18 for age in ages):
print("Semua peserta sudah dewasa")
# Output: Semua peserta sudah dewasaDalam pemanggilan fungsi, asterisk di depan iterable (*) mengembangkannya menjadi argumen posisi. Jumlah argumen yang dihasilkan tetap harus sesuai dengan yang diterima fungsi.
Fungsi yang mengharapkan koordinat terpisah akan menerima list sebagai satu argumen jika list itu tidak di-unpack. Pengindeksan manual berfungsi untuk bentuk tetap, tetapi mengulang struktur container di setiap tempat pemanggilan.
import math
# Masalah: fungsi math.hypot membutuhkan argumen terpisah
coordinates = [3, 4]
# Cara yang salah - akan menghasilkan error
try:
result = math.hypot(coordinates)
print(result)
except TypeError as e:
print("Error:", e)
# Output: Error: must be real number, not list
# Cara manual yang merepotkan untuk banyak argumen
result = math.hypot(coordinates[0], coordinates[1])
print("Hasil manual:", result)
# Output: Hasil manual: 5.0
# Contoh dengan lebih banyak argumen
points = [1, 1, 1, 1]
# Cara manual menjadi sangat merepotkan
result = math.hypot(points[0], points[1], points[2], points[3])
print("Hasil dengan 4 argumen:", result)
# Output: Hasil dengan 4 argumen: 2.0Menempatkan * sebelum iterable di dalam pemanggilan akan meneruskan setiap item yang dihasilkan sebagai argumen posisi tersendiri.
import math
# Solusi dengan unpacking operator
coordinates = [3, 4]
result = math.hypot(*coordinates)
print("Jarak dari origin:", result)
# Output: Jarak dari origin: 5.0
# Contoh dengan tuple
point_3d = (1, 2, 2)
distance = math.hypot(*point_3d)
print("Jarak 3D:", distance)
# Output: Jarak 3D: 3.0
# Contoh dengan banyak argumen
dimensions = [2, 3, 6, 1, 4]
euclidean_distance = math.hypot(*dimensions)
print("Jarak Euclidean:", euclidean_distance)
# Output: Jarak Euclidean: 8.12403840463596
# Contoh praktis lainnya
def calculate_average(a, b, c):
return (a + b + c) / 3
grades = [85, 90, 78]
average = calculate_average(*grades)
print("Rata-rata nilai:", average)
# Output: Rata-rata nilai: 84.33333333333333Sintaks yang sama bekerja dalam pemanggilan fungsi dan tampilan collection. Gunakan ketika ekspansi memang menjadi bagian antarmuka yang dituju, bukan ketika fungsi sudah menerima satu iterable secara langsung.
# Unpacking untuk fungsi print
items = ["apel", "jeruk", "mangga"]
print("Buah-buahan:", *items)
# Output: Buah-buahan: apel jeruk mangga
# Unpacking argumen tetap untuk range()
bounds = [2, 10, 2]
print("Nilai genap:", list(range(*bounds)))
# Output: Nilai genap: [2, 4, 6, 8]
# Unpacking untuk menggabungkan list
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = [*list1, *list2]
print("List gabungan:", combined)
# Output: List gabungan: [1, 2, 3, 4, 5, 6]
# Unpacking dalam fungsi format string
template = "Nama: {}, Umur: {}, Kota: {}"
data = ["Alice", 25, "Jakarta"]
formatted = template.format(*data)
print(formatted)
# Output: Nama: Alice, Umur: 25, Kota: Jakarta