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 Sumber
daftar_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 Sumber
angka = [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 Sumber
matriks = [[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 9

Coba 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: 150

Coba 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 Sumber
angka_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: Rendah

Coba 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 Sumber
tugas = [("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: 3

Coba 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.

  1. Apa perbedaan utama list dan tuple?
  2. Metode untuk menambah satu item ke akhir list adalah …
  3. Jika data = [10, 20, 30], apa nilai data[1]?
  4. Apa hasil [x * 2 for x in range(3)]?
  5. Apakah tuple dapat berisi list?
Kerjakan Kuis

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 Latihan

Hasil 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 Solusi

Latihan 12-L02 – Koordinat tetap

Penerapan. Simpan koordinat (3, 5) dalam tuple, unpack menjadi x dan y, lalu cetak x + y.

Kerjakan di IDE Unduh Latihan

Hasil 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 Solusi

Latihan 12-L03 – Menyaring nilai

Pengembangan. Dari nilai [60, 85, 72, 90], buat list nilai yang minimal 75 memakai comprehension.

Kerjakan di IDE Unduh Latihan

Hasil 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 Solusi

Pengembangan

Kegiatan Tambahan

  1. Buat list berisi 5 nama teman. Tambahkan 2 nama lagi, hapus satu nama, dan tampilkan hasilnya.

  2. Buat list angka dari 1-20. Gunakan list comprehension untuk:

    1. Membuat list angka genap saja
    2. Membuat list angka kuadrat dari angka ganjil
    3. Membuat list string “genap” atau “ganjil” untuk setiap angka
  3. Simpan koordinat 5 kota sebagai tuple (latitude, longitude). Buat list yang berisi tuple-tuple tersebut. Tampilkan semua koordinat.

  4. Buat list nilai ujian: [85, 92, 78, 90, 88, 76, 95]. Hitung:

    1. Rata-rata nilai (gunakan sum() dan len())
    2. Nilai tertinggi dan terendah (gunakan max() dan min())
    3. Berapa banyak siswa yang dapat nilai >= 85
  5. Buat nested list (matriks 3×3) berisi angka 1-9. Tampilkan:

    1. Seluruh matriks
    2. Elemen pada baris 2, kolom 3
    3. Diagonal utama (elemen [0][0], [1][1], [2][2])
  6. Buat tuple berisi 3 warna RGB: ("merah", "hijau", "biru"). Coba ubah salah satu warna. Apa yang terjadi? Jelaskan error-nya.

  7. Implementasikan sistem Todo List (seperti studi kasus) dengan fitur:

    1. Tambah tugas baru dengan prioritas
    2. Tandai tugas selesai
    3. Hapus tugas
    4. Tampilkan hanya tugas dengan prioritas “Urgent”
    5. Tampilkan statistik: berapa tugas selesai vs belum
  8. Buat list mahasiswa, di mana setiap mahasiswa adalah tuple berisi (nama, npm, jurusan). Buat fungsi untuk:

    1. Mencari mahasiswa berdasarkan NPM
    2. Menampilkan semua mahasiswa dari jurusan tertentu
    3. Menghitung jumlah mahasiswa per jurusan
  9. Diberikan dua list:

    list1 = [1, 2, 3, 4, 5]
    list2 = [4, 5, 6, 7, 8]

    Gunakan list comprehension untuk:

    1. Membuat list yang berisi item yang ada di kedua list (tanpa duplikat)
    2. Membuat list pasangan tuple dari kedua list: [(1,4), (2,5), (3,6), …]
  10. Kapan kamu akan memilih tuple daripada list? Berikan 3 contoh kasus konkret dan jelaskan alasannya.

Referensi dan Materi Pendamping

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.

Bab 11 | Bab 13