22. List — Solusi Pekerjaan Rumah
File solusi .py ada di
exercises/22/homework/solutions/.
Soal 1 — Game favorit
Soal. Cetak list bernomor menggunakan
enumerate.
Cara berpikir. enumerate(games, 1)
memberikan indeks (mulai dari 1) dan nilainya. Bangun setiap baris dari
indeks, titik, spasi, dan nilainya.
Solusi.
games = ["Roblox", "Minecraft", "Terraria", "Stardew Valley", "Hades"]
for i, name in enumerate(games, 1):
print(f"{i}. {name}")Output:
1. Roblox
2. Minecraft
3. Terraria
4. Stardew Valley
5. Hades
Kesalahan umum.
- Mengindeks dari 0 sehingga mendapat
0. Roblox. Berikan1sebagai argumen keduaenumerateuntuk memulai penomoran dari 1. - Menggunakan
range(len(games))lalugames[i]. Itu bekerja, tapienumeratelebih langsung dan mudah dibaca.
Soal 2 — Jumlahkan list
Soal. Tambahkan setiap angka dalam list; cetak totalnya.
Cara berpikir. Simpan total yang berjalan,
diperbarui dengan total = total + value di dalam loop. Kamu
juga bisa menggunakan bawaan sum(scores) untuk satu
baris.
Solusi.
scores = [12, 7, 24, 9, 30]
total = 0
for value in scores:
total = total + value
print(f"Total: {total}")Atau bentuk singkatnya:
scores = [12, 7, 24, 9, 30]
print(f"Total: {sum(scores)}")Kesalahan umum.
- Lupa
total = 0sebelum loop.None + 12adalah error.
Soal 3 — Sisipkan dan hapus
Soal. Lakukan empat operasi list, cetak list setelah masing-masing.
Cara berpikir. Tulis helper pencetakan kecil satu kali dan panggil setelah setiap langkah. Lalu operasinya menjadi satu baris masing-masing.
Solusi.
lst = ["apple", "banana", "cherry"]
def show(label):
print(f"{label}: {', '.join(lst)}")
show("Start ")
lst.append("date")
show("After append ")
lst.insert(0, "apricot")
show("After insert@0 ")
lst.pop()
show("After pop ")
lst.pop(1)
show("After pop@1 ")Output:
Start : apple, banana, cherry
After append : apple, banana, cherry, date
After insert@0 : apricot, apple, banana, cherry, date
After pop : apricot, apple, banana, cherry
After pop@1 : apricot, banana, cherry
Kesalahan umum.
- Menggunakan
lst[1] = Nonealih-alihlst.pop(1). Itu meninggalkanNonedi list alih-alih menghapus slot-nya. - Bingung dengan posisi berbasis 0:
insert(0, ...)menyisipkan di awal sekali;insert(1, ...)menyisipkan sebelum posisi 1 (item kedua).
Tantangan — Balik list
Soal. reverse(lst) mengembalikan list
baru, aslinya tidak berubah.
Cara berpikir. Bangun list baru di dalam function.
Telusuri aslinya dari belakang ke depan — baik dengan range
yang dibalik atau dengan slice — tambahkan setiap nilai ke list baru,
dan kembalikan.
Solusi.
def reverse(lst):
result = []
for i in range(len(lst) - 1, -1, -1):
result.append(lst[i])
return result
fruits = ["apple", "banana", "cherry"]
print(", ".join(fruits)) # apple, banana, cherry
reversed_fruits = reverse(fruits)
print(", ".join(reversed_fruits)) # cherry, banana, apple
print(", ".join(fruits)) # apple, banana, cherry (unchanged)Python juga punya lst[::-1] (slice yang dibalik) dan
list(reversed(lst)) sebagai cara bawaan untuk membalik.
Begitu kamu tahu itu ada, gunakanlah; loop manual di atas untuk memahami
mekanismenya.
Kesalahan umum.
- Memodifikasi
lstdi tempat alih-alih membangun list baru. Soal meminta aslinya tetap tidak berubah. - Off-by-one pada range:
range(len(lst) - 1, -1, -1)dimulai dari indeks valid terakhir dan berhenti tepat sebelum-1(yaitu di0).
Selesai?
Bab berikutnya mengajarkan dictionary — struktur data yang memetakan nama ke nilai, seperti tabel pencarian.