Ekskul CSSE · SMAS St. John — BINUSPertemuan 11
11
Struktur Data · Sesi 11 — List / Array
List /
Array

Satu nama pegang banyak nilai — keranjang, bukan satu kotak. Dari sini lahir semua program data nyata.

TUJUAN 01
Membuat & mengakses list — indeks 0, indeks negatif, slicing [1:3]
TUJUAN 02
Mengelola isi dengan append · remove · len · in
TUJUAN 03
Loop for e in list & rekap n nilai → rata-rata
Target — apa yang kita capai hari ini

Dari satu kotak ke satu keranjang

Target Sesi 11
  1. Membuat list & mengakses elemen — indeks mulai 0, indeks negatif -1, slicing [1:3]
  2. Mengelola isi list — append, remove, insert, cek in, hitung len
  3. Loop for e in list & menghitung rata-rata sum/len
◎

Sesi 10 kamu bisa mengulang cetakan pola — hari ini datanya jadi banyak, dan satu list mengendalikan semuanya.

Alur 100 menit
10'Pembuka & rekap Sesi 10
25'Materi 1: keranjang, indeks, slicing
15'Tugas 1: kelola daftar nilai
20'Tugas 2: rekap n nilai → rata-rata
20'Challenge: daftar teman
10'Rangkuman & Q&A
Prasyaratfor + pola akumulasi dari Sesi 09 — minggu ini mereka naik wadah.
Sebelum gas — minggu lalu kamu ndapetin apa?

Rekap Sesi 10 · Nested Loop & Pattern

Yang sudah kamu pegang
  • Nested loop — loop luar = baris, loop dalam = kolom
  • Persegi & segitiga — "*" * n vs "*" * (i+1) — beda 1 angka, beda bentuk
  • Piramida — spasi n-i-1 + bintang ganjil 2*i+1
  • Pola angka — str(i) * i → 1 / 22 / 333

Satu loop = kamu bisa mengulang satu cetakan. Hari ini yang diulang bukan cetakan — tapi data yang beneran beda-beda: nilai, nama, barang.

Kuis kilat — tebak output!
angka_fav = [7, 13, 99]
print(len(angka_fav))

Nge-print berapa? Kalau kamu jawab "3" — kamu sudah setengah paham list, tinggal dibikin resmi hari ini.

!

Posisimu: 11 dari 17 — 65% perjalanan. Menuju Functions, String & Mini Project 2!

Rekap nilai 30 siswa — mau bikin 30 variabel?

List = keranjang, bukan satu kotak

Code — bandingkan sendiri
# Variabel tunggal — 1 nilai 1 nama
nilai1 = 85
nilai2 = 90
nilai3 = 78
# ... masih ada 27 lagi. Capek.

# List — 1 nama pegang 3 nilai
nilai = [85, 90, 78]
print(nilai)          # [85, 90, 78]
print(len(nilai))     # 3

Pergi ke warung: tangan cuma bisa pegang satu-dua barang (variabel tunggal). Bawa keranjang — satu wadah, isinya banyak, bisa ditambah, bisa dibuang.

Visual — kotak vs keranjang
VARIABEL TUNGGAL
85
nilai1

1 kotak = 1 nilai

LIST
85[0]
90[1]
78[2]
nilai

1 keranjang = 3 sekat bernomor

→

Aturan tulis: kurung siku [ ] + koma. Kosong = []. Rekap nilai, daftar tugas, keranjang game — semuanya berdiri di atas list.

Loker pertama di sekolah bernomor berapa? Bukan 1.

Indeks mulai dari 0

Code — akses elemen
nilai = [85, 92, 78, 88]

print(nilai[0])      # 85 — yang PERTAMA
print(nilai[3])      # 88 — yang TERAKHIR

nilai[1] = 95        # ganti isi sekat 1
print(nilai)          # [85, 95, 78, 88]
Cara membacanya
  • nilai[0] — sekat pertama, bukan yang kedua
  • nilai[3] — indeks terakhir = len - 1
  • nilai[1] = 95 — isi sekat bisa diganti (list itu fleksibel)
Peta sekat — 4 elemen
[0]
85
[1]
92
[2]
78
[3]
88

4 isi, nomornya 0–3. Hitungan mulai nol — sama seperti range().

?

Kenapa mulai 0? Itu konvensi developer sedunia — dan cocok dengan range() yang sudah kamu kuasai di Sesi 09.

Mau ambil yang TERAKHIR — tanpa hitung panjangnya?

Indeks negatif — hitung dari belakang

Code — dari belakang
nilai = [85, 92, 78, 88]

print(nilai[-1])     # 88 — terakhir
print(nilai[-2])     # 78 — kedua dari belakang

# nilai[-1] itu jalan pintas elegan:
# tanpa negatif → nilai[len(nilai) - 1]
Cara membacanya

Angka negatif = mundur dari belakang. -1 satu langkah dari ujung, -2 dua langkah — seperti loker dihitung mundur.

Peta dua arah
[0]
85
[-4]
[1]
92
[-3]
[2]
78
[-2]
[3]
88
[-1]

Satu keranjang, dua penomoran: maju dari 0, mundur dari -1.

!

Coba tebak dulu sebelum di-run: nilai[-4] keluar apa? Kalau kamu jawab 85 — kamu siap buat slicing.

Ambil beberapa sekat sekaligus — kok [1:3] cuma dua?

Slicing — stop itu garis finis

Code — ambil rentang
nilai = [85, 92, 78, 88]

print(nilai[1:3])    # [92, 78] — indeks 3 TIDAK ikut
print(nilai[:2])      # [85, 92] — dari awal
print(nilai[2:])      # [78, 88] — sampai habis

Ini persis pola range(start, stop) dari Sesi 09 — berhenti SEBELUM stop. Angka 3 cuma garis finis, tidak diinjak.

Visual — [1:3] menyorot mana?
[0]
85
[1]
92
[2]
78
[3]
88

Hasilnya [92, 78] — dua sekat tengah saja.

Kuis: nilai[1:3] isinya 2 elemen. Berapa elemen nilai[0:3]? Hitung: 3 dikurangi 0 = 3 elemen — stop dikurangi start.

→

Versi lengkap: [start:stop]. Bolongin start = dari awal. Bolongin stop = sampai habis.

Giliran kamu — keranjangnya nunggu diisi

Tugas 1 · Kelola daftar nilaimu

Kerjakan berurutan — 3 langkah
  1. Awali — nilai = [85, 92, 78, 88]. Tebak dulu: nilai[0], nilai[-1], nilai[1:3] — baru run & buktikan.
  2. Kelola — tambah 95 di akhir pakai append, cetak list. Hapus 78 pakai remove, cetak lagi.
  3. Cek — 90 in nilai dan 95 in nilai. Amati hasilnya: True/False, bukan isinya.
Cetak alat bantu

print(len(nilai)) setiap langkah — awasi ukuran keranjang berubah: 4 → 5 → 4. Ukuran yang kamu pegang = senjata anti IndexError.

Output yang harus muncul
[85, 92, 78, 88]
[85, 92, 78, 88, 95]
[85, 92, 88, 95]
False
True

Urutan langkah 1 → 3. Ukuran naik lalu turun — keranjang yang hidup.

!

Waktu: 15 menit. Selesai duluan? Coba nilai.insert(1, 70) — sisip di tengah, lihat sekat lain geser.

Loop 30 nilai tanpa ngetik nilai[0], nilai[1], ... satu-satu?

for di atas list — mesin pencetak keranjang

Code — loop & pola wadah
nilai = [85, 70, 92]

for angka in nilai:      # angka = 85, lalu 70, lalu 92
    print(angka)

# POLA WADAH — mirror pola akumulasi Sesi 09:
rekap = []                     # wadah kosong, SEBELUM loop
for i in range(3):
    rekap.append(i * 10)       # diisi DI DALAM loop
print(rekap)                    # [0, 10, 20] — di LUAR loop
Cara membacanya
  • for angka in nilai: — Python antre tiap isi, tanpa indeks. Inilah for e in list.
  • rekap = [] di luar, append di dalam, olah di luar — tiga posisi wajib.
  • for x in nilai: vs for i in range(len(nilai)): — dua-duanya sah; yang pertama lebih enak dibaca.
→

Pola wadah ini kanal jalan buat tugas 2: masukkan n nilai dari user ke satu list. Keranjang menunggu.

Naik level — dari keranjang mainan ke program penilaian beneran

Tugas 2 · Rekap n nilai → rata-rata

Misi — tugas penilaian sesi ini
  1. Tanya user mau rekap berapa nilai → n = int(input(...))
  2. Siapkan rekap = [] — wadah kosong, di luar loop
  3. Loop n kali: tanya tiap nilai → rekap.append(skor) — isi di dalam loop
  4. Setelah loop: cetak semua nilai & rata-rata sum(rekap) / len(rekap) — di luar loop
Kerangka mulai
rekap = []
n = int(input("Mau rekap berapa nilai? "))
for i in range(n):
    skor = int(input(f"Nilai ke-{i+1}: "))
    rekap.append(skor)
# setelah loop: cetak & hitung
Contoh jalannya program (n = 3)
Mau rekap berapa nilai? 3
Nilai ke-1: 85
Nilai ke-2: 70
Nilai ke-3: 92
Semua nilai: [85, 70, 92]
Rata-rata: 82.33333333333333

Purata-rataan beda kalau datanya beda — yang penting rumusnya: sum / len.

!

Waktu: 20 menit. Ini tugas penilaian sesi 11 — tiga posisi (wadah / isi / hitung) adalah kuncinya.

Tantangan terakhir — dari angka ke nama teman

Challenge · Daftar teman yang rapi

Misi A — absensi otomatis
Budi
Ani
Cici
Dodi

Bikin teman = ["Budi", "Ani", "Cici", "Dodi"] — loop dan cetak satu per satu bernomor: 1 Budi, 2 Ani, … Petunjuk: pakai variabel nomor yang di-+= 1 tiap putaran.

Misi B — hapus nama dengan aman
cari = "Ani"
# cek dulu: ada gak "Ani" di teman?
# kalau ada → remove, cetak list baru
# kalau tidak ada → "Ani tidak ada"

Hapus satu nama dari list — tapi cek dulu pakai in sebelum remove. Yang tidak ada di keranjang tidak bisa dibuang — dan Python akan berteriak kalau kamu maksa.

Waktu 15 menit · dua misi sekali jalan. Bahan: for, in, remove — semua alat lama, dirakit jadi satu.
Gimana cara menyelesaikannya?

Pembahasan Challenge — kode lengkap

Solusi A — absensi bernomor
teman = ["Budi", "Ani", "Cici", "Dodi"]
nomor = 1
for nama in teman:
    print(nomor, nama)
    nomor += 1          # maju tiap putaran

Output: 1 Budi … 4 Dodi. Variabel nomor hidup di luar loop dan bertambah di dalam — pola akumulasi versi penghitung.

Solusi B — cek dulu baru hapus
cari = "Ani"
if cari in teman:
    teman.remove(cari)
    print("List sekarang:", teman)
else:
    print(cari, "tidak ada")

Tanpa if cari in teman:, menghapus nama yang memang tidak ada → ValueError. Pola "cek dulu baru hapus" — jadikan kebiasaan, bukan tambalan.

!

Yang cepat selesai: hitung berapa nama yang berawalan "C" — petunjuk: nama[0] == "C" di dalam loop. Kamu menggabung list + string + kondisi sekaligus!

Program nggak jalan? Mungkin kamu kena salah satu ini

Kotak masalah — 3 jebakan list

Jebakan 01
IndexError — indeks lewat batas
nilai = [85, 92, 78, 88]
print(nilai[4])
# IndexError: list index out of range

List ada 4 isi, indeksnya 0–3. Kamu tanya loker nomor 5 padahal cuma ada 4. Kebiasaan penyelamat: cek len(nilai) dulu sebelum akses indeks hasil hitungan.

Jebakan 02
ValueError — remove yang tak ada
nilai = [85, 92, 78]
nilai.remove(99)
# ValueError: 99 not in list

Membuang barang yang tidak ada di keranjang. Obatnya satu kalimat: if 99 in nilai: dulu, baru remove. Cek dulu, baru hapus.

Jebakan 03
Rata-rata nol / error
rekap = []
for i in range(3):
    skor = int(input("nilai: "))
print(sum(rekap) / len(rekap))
# ZeroDivisionError — rekap kosong!

Lupa rekap.append(skor) di dalam loop, atau rekap = [] ditulis di dalam loop (ter-reset terus). Cek tiga posisi wajib.

Error itu alarm, bukan aib — dan IndexError pasti nongol hari ini. Kalau ada yang kena: berhenti, bacakan pesannya bareng, hitung len(nilai) — "list ada 4, indeks terakhir 3, kamu minta nomor berapa?"

Rangkuman — yang kita bawa pulang

5 poin hari ini — keranjang dikuasai

01
List = 1 nama pegang banyak nilai — keranjang bersekat, bukan tumpukan variabel nilai1, nilai2, …
02
Akses via indeks mulai 0 & negatif -1 dari belakang — indeks terakhir = len(list) - 1
03
Slicing [1:3] ambil rentang — stop itu garis finis, sama persis dengan range()
04
Kelola: append · remove · insert · len · in — hapus selalu lewat gerbang if x in list:
05
Pola wadah: rekap = [] di luar · append di dalam · sum/len di luar → rata-rata jalan
Keranjang dikuasai — datanya siap diolah Next → Functions / Modular
Next — langkah selanjutnya

Minggu depan:
Functions / Modular

Sesi 12 — Functions / Modular Programming

Hari ini hitung rata-rata tulis sekali jalan —
minggu depan bungkus jadi mesin: def rata_rata(daftar):

Panggil berkali-kali tanpa copy-paste — kode rata-ratamu jadi mesin mini yang siap dipakai di tiga tempat program.

intip:
def rata_rata(daftar):
  return sum(daftar) / len(daftar)
print(rata_rata([85, 92, 78])) # 85.0
def · returnparameter & argumentreuse
PR iseng (opsional)
  • Bikin belanja.py — list 5 barang, tambah 1, hapus 1, cetak pakai for
  • Hitung rata-rata 4 nilai ulanganmu dengan sum/len
  • Tidak ada laptop? Tulis list & slicing di kertas — minggu depan ketik bareng
Sampai jumpa di Sesi 12! ingat: 1 list = banyak nilai