Pendamping Bab 12: List dan Tuple: Koleksi Berurutan. Gunakan nomor contoh dan latihan yang sama dengan buku.
Tujuan Belajar
- Membaca dan mengubah list.
- Menggunakan tuple untuk kelompok nilai tetap.
- Memilih koleksi dan mengolahnya dengan perulangan atau comprehension.
Persiapan
Kamu sudah memahami perulangan dan fungsi. Indeks list dan tuple mengikuti pola indeks string.
Program dengan tombol Coba di IDE dapat dijalankan di browser. Untuk program lokal, unduh sumber, ekstrak ZIP, lalu ikuti README.txt.
Pembahasan
12-01 – List: Koleksi yang Dapat Diubah
Instruksi dijalankan dari atas ke bawah; print menampilkan nilai saat instruksi itu dijalankan.
Coba di IDE Unduh Sumberdaftar_buah = ["apel", "jeruk", "mangga", "pisang"]
print(daftar_buah)
print(daftar_buah[0])
# Output: apel (mengakses elemen pertama, indeks 0)
print(daftar_buah[-1])
# Output: pisang (mengakses elemen terakhir)
print(daftar_buah[1:3])
# Output: ['jeruk', 'mangga']
# (slicing: dari indeks 1 hingga sebelum indeks 3)
print(daftar_buah[:2])
# Output: ['apel', 'jeruk']
# (slicing: dari awal hingga sebelum indeks 2)
Hasil yang diharapkan:
['apel', 'jeruk', 'mangga', 'pisang']
apel
pisang
['jeruk', 'mangga']
['apel', 'jeruk']Coba ubah: Ubah satu nilai pada daftar_buah dan periksa bagian hasil yang ikut berubah.
12-02 – List: Koleksi yang Dapat Diubah
Perhatikan pemakaian sort, reverse, copy, clear pada data contoh dan bandingkan hasilnya dengan nilai awal.
Coba di IDE Unduh Sumberangka = [3, 1, 4, 1, 5, 9, 2, 6]
print(len(angka))
# Output: 8 (jumlah elemen)
print(1 in angka)
# Output: True (cek apakah 1 ada di list)
print(angka.count(1))
# Output: 2 (hitung berapa kali 1 muncul)
print(angka.index(9))
# Output: 5 (cari indeks pertama dari nilai 9)
angka.sort()
# Mengurutkan list: [1, 1, 2, 3, 4, 5, 6, 9]
print(angka)
angka.reverse()
# Membalik urutan list: [9, 6, 5, 4, 3, 2, 1, 1]
print(angka)
list_baru = angka.copy()
# Membuat salinan list
angka.clear()
# Menghapus semua elemen dari list
Hasil yang diharapkan:
8
True
2
5
[1, 1, 2, 3, 4, 5, 6, 9]
[9, 6, 5, 4, 3, 2, 1, 1]Coba ubah: Ubah satu nilai pada angka dan periksa bagian hasil yang ikut berubah.
12-03 – List: Koleksi yang Dapat Diubah
Instruksi dijalankan dari atas ke bawah; print menampilkan nilai saat instruksi itu dijalankan.
Coba di IDE Unduh Sumbermatriks = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(matriks[0][1]) # Output: 2 (elemen baris 0, kolom 1)
for baris in matriks:
for elemen in baris:
print(elemen, end=" ")
print() # Pindah baris
Hasil yang diharapkan:
2
1 2 3
4 5 6
7 8 9Coba ubah: Ubah satu nilai pada matriks dan periksa bagian hasil yang ikut berubah.
12-04 – List: Koleksi yang Dapat Diubah
List comprehension adalah cara singkat dan elegan untuk membuat list baru dari list/iterable lain.
Coba di IDE Unduh Sumber# Cara lama: Membuat list angka kuadrat
kuadrat = []
for n in range(10):
kuadrat.append(n**2)
print(kuadrat)
# Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# Cara baru: List comprehension (satu baris!)
kuadrat = [n**2 for n in range(10)]
print(kuadrat)
# Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# Dengan filter (hanya angka genap)
genap_kuadrat = [n**2 for n in range(10) if n % 2 == 0]
print(genap_kuadrat)
# Output: [0, 4, 16, 36, 64]
# Transform string
buah = ["apel", "jeruk", "mangga"]
buah_upper = [b.upper() for b in buah]
print(buah_upper)
# Output: ['APEL', 'JERUK', 'MANGGA']
Hasil yang diharapkan:
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 4, 16, 36, 64]
['APEL', 'JERUK', 'MANGGA']Coba ubah: Ubah satu nilai pada kuadrat dan periksa bagian hasil yang ikut berubah.
12-05 – Tuple: Kelompok Nilai Tetap
Perhatikan pemakaian hitung_statistik, min, max, sum pada data contoh dan bandingkan hasilnya dengan nilai awal.
Coba di IDE Unduh Sumber# Unpacking tuple
# (membongkar nilai tuple ke variabel-variabel terpisah)
posisi = (100, 200, 50)
x, y, z = posisi
print(f"X: {x}, Y: {y}, Z: {z}")
# Output: X: 100, Y: 200, Z: 50
# Contoh fungsi yang return multiple values
def hitung_statistik(angka_list):
return min(angka_list), max(angka_list), sum(angka_list)
data = [10, 20, 30, 40, 50]
minimum, maksimum, total = hitung_statistik(data)
print(f"Min: {minimum}, Max: {maksimum}, Total: {total}")
# Output: Min: 10, Max: 50, Total: 150
Hasil yang diharapkan:
X: 100, Y: 200, Z: 50
Min: 10, Max: 50, Total: 150Coba ubah: Ubah satu nilai pada posisi dan periksa bagian hasil yang ikut berubah.
12-06 – Tuple: Kelompok Nilai Tetap
Perhatikan pemakaian len, count, index pada data contoh dan bandingkan hasilnya dengan nilai awal.
Coba di IDE Unduh Sumberangka_tuple = (1, 2, 2, 3, 4, 2)
print(len(angka_tuple))
# Output: 6
print(angka_tuple.count(2))
# Output: 3 (berapa kali angka 2 muncul)
print(angka_tuple.index(3))
# Output: 3 (indeks pertama dari angka 3)
print(4 in angka_tuple)
# Output: True
# Tuple bisa digabungkan (membuat tuple baru)
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
tuple_gabung = tuple1 + tuple2
print(tuple_gabung)
# Output: (1, 2, 3, 4, 5, 6)
# Tuple bisa direpetisi
tuple_ulang = ("halo",) * 3
print(tuple_ulang)
# Output: ('halo', 'halo', 'halo')
Hasil yang diharapkan:
6
3
3
True
(1, 2, 3, 4, 5, 6)
('halo', 'halo', 'halo')Coba ubah: Ubah satu nilai pada angka_tuple dan periksa bagian hasil yang ikut berubah.
12-08 – Pengembangan: Sistem Todo List dengan Prioritas
Mari kita buat aplikasi Todo List yang menggabungkan List dan Tuple untuk mengelola tugas harian.
Coba di IDE Unduh Sumber# Konstanta prioritas sebagai tuple (tidak akan berubah)
PRIORITAS = ("Rendah", "Sedang", "Tinggi", "Urgent")
# List of tuples: setiap tugas terdiri dari
# (deskripsi, prioritas_index, selesai)
todo_list = [
("Belajar Python Bab 12", 3, False), # Urgent, belum selesai
("Olahraga pagi", 1, True), # Sedang, sudah selesai
("Mengerjakan PR Matematika", 3, False), # Urgent
("Baca buku", 0, False), # Rendah
]
def tampilkan_tugas():
"""Menampilkan semua tugas dengan status dan prioritas."""
if not todo_list:
print("Tidak ada tugas!")
return
print("\n=== DAFTAR TUGAS ===")
for idx, tugas in enumerate(todo_list):
deskripsi, prioritas_idx, selesai = tugas
status = "[OK] Selesai" if selesai else "[X] Belum"
prioritas = PRIORITAS[prioritas_idx]
print(f"{idx+1}. {status} - {deskripsi}")
print(f" Prioritas: {prioritas}\n")
def tambah_tugas(deskripsi, prioritas_idx):
"""Menambahkan tugas baru ke list."""
if prioritas_idx < 0 or prioritas_idx >= len(PRIORITAS):
print("Prioritas tidak valid!")
return
tugas_baru = (deskripsi, prioritas_idx, False)
todo_list.append(tugas_baru)
print(f"Tugas '{deskripsi}' ditambahkan!")
def tandai_selesai(nomor_tugas):
"""Menandai tugas sebagai selesai."""
if nomor_tugas < 1 or nomor_tugas > len(todo_list):
print("Nomor tugas tidak valid!")
return
idx = nomor_tugas - 1
deskripsi, prioritas_idx, _ = todo_list[idx]
# Buat tuple baru dengan status selesai = True
todo_list[idx] = (deskripsi, prioritas_idx, True)
print(f"Tugas '{deskripsi}' ditandai selesai!")
def hapus_tugas(nomor_tugas):
"""Menghapus tugas dari list."""
if nomor_tugas < 1 or nomor_tugas > len(todo_list):
print("Nomor tugas tidak valid!")
return
idx = nomor_tugas - 1
tugas_dihapus = todo_list.pop(idx)
print(f"Tugas '{tugas_dihapus[0]}' dihapus!")
def tampilkan_belum_selesai():
"""Menampilkan tugas yang belum selesai,
diurutkan berdasarkan prioritas."""
belum_selesai = [
t for t in todo_list if not t[2]
] # Filter tuple dengan selesai=False
if not belum_selesai:
print("Semua tugas sudah selesai!")
return
# Sort berdasarkan prioritas (tertinggi dulu)
belum_selesai.sort(key=lambda t: t[1], reverse=True)
print("\n=== TUGAS BELUM SELESAI ===")
print("(Prioritas Tertinggi Dulu)")
for deskripsi, prioritas_idx, _ in belum_selesai:
prioritas = PRIORITAS[prioritas_idx]
print(f"- {deskripsi} - Prioritas: {prioritas}")
# Contoh penggunaan
tampilkan_tugas()
print("\n--- Menambah tugas baru ---")
tambah_tugas("Latihan Python", 2) # Prioritas Tinggi
print("\n--- Menandai tugas selesai ---")
tandai_selesai(3) # Tandai tugas nomor 3 selesai
tampilkan_belum_selesai()
Hasil yang diharapkan:
=== DAFTAR TUGAS ===
1. [X] Belum - Belajar Python Bab 12
Prioritas: Urgent
2. [OK] Selesai - Olahraga pagi
Prioritas: Sedang
3. [X] Belum - Mengerjakan PR Matematika
Prioritas: Urgent
4. [X] Belum - Baca buku
Prioritas: Rendah
--- Menambah tugas baru ---
Tugas 'Latihan Python' ditambahkan!
--- Menandai tugas selesai ---
Tugas 'Mengerjakan PR Matematika' ditandai selesai!
=== TUGAS BELUM SELESAI ===
(Prioritas Tertinggi Dulu)
- Belajar Python Bab 12 - Prioritas: Urgent
- Latihan Python - Prioritas: Tinggi
- Baca buku - Prioritas: RendahCoba ubah: Ubah satu nilai pada PRIORITAS dan periksa bagian hasil yang ikut berubah.
Studi Kasus
12-07 – Daftar tugas berprioritas
List dapat bertambah; setiap tuple mempertahankan pasangan nama dan prioritas. Unpacking di dalam for memberi nama pada kedua komponennya.
Coba di IDE Unduh Sumbertugas = [("Belajar Python", "Tinggi"), ("Olahraga", "Sedang")]
tugas.append(("Membaca buku", "Rendah"))
for nama, prioritas in tugas:
print(f"{nama}: {prioritas}")
print(f"Jumlah tugas: {len(tugas)}")
Hasil yang diharapkan:
Belajar Python: Tinggi
Olahraga: Sedang
Membaca buku: Rendah
Jumlah tugas: 3Coba ubah: Tambahkan tugas lain dan tampilkan hanya prioritas Tinggi.
Rangkuman
List dapat diubah, sedangkan tuple tidak mendukung perubahan item secara langsung. Keduanya berurutan dan menerima nilai duplikat. Pilih berdasarkan kebutuhan perubahan dan makna data.
Cek Pemahaman
Lima pertanyaan ini sama dengan pertanyaan di buku. Periksa jawaban di kuis untuk melihat skor dan pembahasan.
- Apa perbedaan utama list dan tuple?
- Metode untuk menambah satu item ke akhir list adalah …
- Jika data = [10, 20, 30], apa nilai data[1]?
- Apa hasil [x * 2 for x in range(3)]?
- Apakah tuple dapat berisi list?
Latihan Mandiri
Latihan 12-L01 – Daftar belanja
Dasar. Buat list Buku dan Pensil. Tambahkan Penghapus, lalu cetak tiap barang pada baris terpisah.
Kerjakan di IDE Unduh LatihanHasil yang diharapkan:
Buku
Pensil
Penghapus
Lihat Petunjuk
Gunakan append dan for.
Lihat Solusi
barang = ["Buku", "Pensil"]
barang.append("Penghapus")
for nama in barang:
print(nama)
Urutan penambahan dipertahankan.
Coba Solusi di IDEUnduh SolusiLatihan 12-L02 – Koordinat tetap
Penerapan. Simpan koordinat (3, 5) dalam tuple, unpack menjadi x dan y, lalu cetak x + y.
Kerjakan di IDE Unduh LatihanHasil yang diharapkan:
8
Lihat Petunjuk
Jumlah nama di kiri sesuai jumlah item.
Lihat Solusi
koordinat = (3, 5)
x, y = koordinat
print(x + y)
Unpacking memberi nama pada tiap komponen.
Coba Solusi di IDEUnduh SolusiLatihan 12-L03 – Menyaring nilai
Pengembangan. Dari nilai [60, 85, 72, 90], buat list nilai yang minimal 75 memakai comprehension.
Kerjakan di IDE Unduh LatihanHasil yang diharapkan:
[85, 90]
Lihat Petunjuk
Tambahkan if pada comprehension.
Lihat Solusi
nilai = [60, 85, 72, 90]
lulus = [angka for angka in nilai if angka >= 75]
print(lulus)
Hanya item yang memenuhi kondisi disertakan.
Coba Solusi di IDEUnduh SolusiPengembangan
Kegiatan Tambahan
Buat list berisi 5 nama teman. Tambahkan 2 nama lagi, hapus satu nama, dan tampilkan hasilnya.
Buat list angka dari 1-20. Gunakan list comprehension untuk:
- Membuat list angka genap saja
- Membuat list angka kuadrat dari angka ganjil
- Membuat list string “genap” atau “ganjil” untuk setiap angka
Simpan koordinat 5 kota sebagai tuple (latitude, longitude). Buat list yang berisi tuple-tuple tersebut. Tampilkan semua koordinat.
Buat list nilai ujian:
[85, 92, 78, 90, 88, 76, 95]. Hitung:- Rata-rata nilai (gunakan
sum()danlen()) - Nilai tertinggi dan terendah (gunakan
max()danmin()) - Berapa banyak siswa yang dapat nilai >= 85
- Rata-rata nilai (gunakan
Buat nested list (matriks 3×3) berisi angka 1-9. Tampilkan:
- Seluruh matriks
- Elemen pada baris 2, kolom 3
- Diagonal utama (elemen [0][0], [1][1], [2][2])
Buat tuple berisi 3 warna RGB:
("merah", "hijau", "biru"). Coba ubah salah satu warna. Apa yang terjadi? Jelaskan error-nya.Implementasikan sistem Todo List (seperti studi kasus) dengan fitur:
- Tambah tugas baru dengan prioritas
- Tandai tugas selesai
- Hapus tugas
- Tampilkan hanya tugas dengan prioritas “Urgent”
- Tampilkan statistik: berapa tugas selesai vs belum
Buat list mahasiswa, di mana setiap mahasiswa adalah tuple berisi (nama, npm, jurusan). Buat fungsi untuk:
- Mencari mahasiswa berdasarkan NPM
- Menampilkan semua mahasiswa dari jurusan tertentu
- Menghitung jumlah mahasiswa per jurusan
Diberikan dua list:
list1 = [1, 2, 3, 4, 5] list2 = [4, 5, 6, 7, 8]Gunakan list comprehension untuk:
- Membuat list yang berisi item yang ada di kedua list (tanpa duplikat)
- Membuat list pasangan tuple dari kedua list: [(1,4), (2,5), (3,6), …]
Kapan kamu akan memilih tuple daripada list? Berikan 3 contoh kasus konkret dan jelaskan alasannya.
Referensi dan Materi Pendamping
- List di Python: Koleksi Berurutan Mutable
- Tuple di Python: Koleksi Immutable
- List Comprehension di Python: Membuat List Satu Baris
Langkah Selanjutnya
Bab 13 membahas Dictionary dan Set: Data Berkunci dan Nilai Unik. Sebelum melanjutkan, pastikan kamu dapat menjelaskan tujuan belajar dan menyelesaikan tiga latihan inti bab ini.
Edisi September 2026. Nomor contoh, pertanyaan, dan latihan digunakan bersama pada buku dan halaman ini.
