Lewati ke isi
Profil penulisSeri Buku GIS Kehutanan dan Pertanian/ PY

BAB 5: Rak dan Daftar Isi: Daftar, Tuple, Set, dan Kamus

Studi kasus: "Dua puluh petak, dua puluh kotak?" #

Kepala Seksi memberi Anda daftar dua puluh nama petak. Anda mulai mengetik: petak1 = ..., petak2 = ..., sampai petak20. Baru tiga baris, Anda sudah lelah. Pasti ada cara yang lebih rapi. Ada: satu kotak yang memuat banyak nilai sekaligus. Bab ini memperkenalkan empat jenis kotak seperti itu.

Konsep: daftar dan kamus dalam tiga kalimat #

Sebuah daftar adalah rak berurutan yang menyimpan banyak nilai, dan tiap nilai punya nomor urut yang dimulai dari 0. Sebuah kamus adalah daftar isi buku: Anda mencari sebuah kunci (judul), lalu mendapat nilai (nomor halaman). Daftar dicari lewat nomor, kamus dicari lewat kunci.

Ilustrasi 5.1: Daftar dan kamus
Skema daftar tiga nama KPH dengan nomor 0, 1, 2 dan kamus yang memasangkan nama KPH dengan luasnya

Istilah baru di bagian ini:

  • Daftar (list): kumpulan nilai berurutan, ditulis di dalam kurung siku [ ].
  • Indeks: nomor urut sebuah nilai di dalam daftar. Indeks pertama adalah 0.

Daftar: rak bernomor #

Daftar ditulis dengan kurung siku. Nilainya dipisah koma.

PYTHONUnduh berkas
petak = ["KPH Alpha", "KPH Beta", "KPH Gamma"]
print(petak[0])
print(len(petak))
petak.append("KPH Delta")
print(petak)
print(petak[-1])
print(petak[1:3])

Baris demi baris:

  • petak[0] mengambil nilai bernomor 0, yaitu yang pertama.
  • len(petak) menghitung banyak isi daftar.
  • petak.append(...) menambahkan satu nilai di ujung daftar.
  • petak[-1] mengambil nilai terakhir. Angka minus berarti menghitung dari belakang.
  • petak[1:3] mengambil irisan: dari nomor 1 sampai sebelum nomor 3.
HASIL
KPH Alpha
3
['KPH Alpha', 'KPH Beta', 'KPH Gamma', 'KPH Delta']
KPH Delta
['KPH Beta', 'KPH Gamma']

Tuple dan set: dua sepupu daftar #

Dua jenis ini jarang berdiri sendiri. Tetapi skrip GIS sering memakainya, jadi kenali sekarang.

  • Tuple: daftar yang tidak bisa diubah setelah dibuat. Ditulis dengan kurung biasa ( ). Cocok untuk pasangan yang tetap, misalnya koordinat.
  • Set (himpunan): kumpulan nilai tanpa kembar dan tanpa urutan.
PYTHONUnduh berkas
titik = (312000.0, 9996000.0)
x, y = titik
print(x, y)

jenis = ["Jati", "Mahoni", "Jati", "Sengon", "Mahoni"]
unik = sorted(set(jenis))
print(unik)
print(len(jenis), len(set(jenis)))

Penjelasannya:

  • Baris x, y = titik membongkar tuple: nilai pertama masuk ke x, nilai kedua ke y. Teknik ini bernama unpacking.
  • set(jenis) membuang nilai yang kembar. sorted(...) mengurutkan hasilnya menurut abjad.
  • Dua angka terakhir menunjukkan: lima nama jenis, tetapi hanya tiga yang berbeda.
HASIL
312000.0 9996000.0
['Jati', 'Mahoni', 'Sengon']
5 3

Pola sorted(set(...)) Anda temui di skrip Buku B2 untuk mendaftar jenis tanaman tanpa pengulangan.

Kamus: daftar isi buku #

Kamus ditulis dengan kurung kurawal { }. Tiap pasangan berbentuk kunci: nilai.

PYTHONUnduh berkas
luas = {"KPH Alpha": 4.0, "KPH Beta": 4.0, "KPH Gamma": 8.0}
print(luas["KPH Gamma"])
luas["KPH Delta"] = 6.5
print(len(luas))
print(luas.get("KPH Omega", 0))
for nama, ha in luas.items():
    print(nama, ha)

Penjelasannya:

  • luas["KPH Gamma"] mencari nilai lewat kunci "KPH Gamma".
  • luas["KPH Delta"] = 6.5 menambah pasangan baru. Bila kuncinya sudah ada, nilainya diganti.
  • luas.get("KPH Omega", 0) mencari kunci yang belum tentu ada. Bila tidak ada, hasilnya 0 (nilai cadangan), bukan galat. Pola ini dipakai di skrip penjumlahan luas per KPH di Buku B2.
  • Baris for ... in luas.items() mengulang tiap pasangan. Perulangan dibahas di Bab 6.
HASIL
8.0
4
0
KPH Alpha 4.0
KPH Beta 4.0
KPH Gamma 8.0
KPH Delta 6.5

Skrip yang dibedah: daftar dan kamus di b1_00 #

Berkas b1_00_python_dasar.py memuat lima hal dasar. Bab 4 membedah bagian pertamanya. Di sini kita bedah bagian kedua dan ketiga.

Tujuan. Menyimpan nama tiga petak dalam daftar, menyimpan luasnya dalam kamus, lalu mengambil masing-masing satu nilai.

Bahan. Tidak ada. Skrip ini tidak memakai QGIS dan tidak membaca berkas.

Skrip (bagian kedua dan ketiga):

PYTHONUnduh berkas
# 2. Daftar: kumpulan nilai berurutan. Nomor urut dimulai dari 0, bukan 1.
petak = ["KPH Alpha", "KPH Beta", "KPH Gamma"]
print("Petak pertama:", petak[0])
print("Jumlah petak:", len(petak))

# 3. Kamus: pasangan kunci dan nilai, seperti daftar isi dengan nomor halaman
luas = {"KPH Alpha": 4.0, "KPH Beta": 4.0, "KPH Gamma": 8.0}
print("Luas KPH Gamma:", luas["KPH Gamma"])

Penjelasan baris demi baris. Nomor baris dihitung dari potongan di atas.

BarisTulisanArtinya
1# 2. Daftar: ...Komentar. Python melewatinya.
2petak = [...]Buat kotak petak berisi daftar tiga teks. Tanda kurung siku menandakan daftar.
3print("Petak pertama:", petak[0])Tampilkan teks, lalu isi nomor 0 dari daftar, yaitu KPH Alpha.
4print("Jumlah petak:", len(petak))Tampilkan banyak isi daftar.
6# 3. Kamus: ...Komentar.
7luas = {...}Buat kotak luas berisi kamus. Tiap pasangan: nama petak sebagai kunci, luasnya sebagai nilai.
8print("Luas KPH Gamma:", luas["KPH Gamma"])Cari kunci "KPH Gamma", lalu tampilkan nilainya.

Hasil.

HASIL
Petak pertama: KPH Alpha
Jumlah petak: 3
Luas KPH Gamma: 8.0

Bagian yang boleh diubah.

  • Isi daftar (baris 2): tambah nama petak, misalnya "KPH Delta". Angka Jumlah petak ikut berubah.
  • Nomor di petak[0] (baris 3): ganti menjadi 1 untuk petak kedua, atau -1 untuk petak terakhir.
  • Isi kamus (baris 7): ubah luas, atau tambah pasangan baru.
  • Kunci di luas["KPH Gamma"] (baris 8): ganti dengan kunci lain yang ada di kamus.

Jebakan.

  • Nomor melebihi isi daftar. Daftar petak hanya punya nomor 0, 1, dan 2. Menulis petak[3] menghasilkan IndexError: list index out of range. Artinya: nomor itu di luar rak.
  • Kunci yang tidak ada. Menulis luas["KPH Omega"] menghasilkan KeyError: 'KPH Omega'. Pakai luas.get("KPH Omega", 0) bila kunci belum tentu ada.
  • Mengubah tuple. Menulis titik[0] = 0 menghasilkan TypeError: 'tuple' object does not support item assignment. Tuple memang tidak bisa diubah. Buat tuple baru bila perlu.
  • Huruf besar dan kecil pada kunci. "kph gamma" dan "KPH Gamma" dianggap dua kunci berbeda.

Latihan variasi. Tambahkan satu petak baru, "KPH Delta" seluas 6.5 hektare, ke daftar dan kamus. Lalu tampilkan jumlah petak dan luas KPH Delta.

Contoh jawaban:

PYTHONUnduh berkas
petak = ["KPH Alpha", "KPH Beta", "KPH Gamma"]
luas = {"KPH Alpha": 4.0, "KPH Beta": 4.0, "KPH Gamma": 8.0}
petak.append("KPH Delta")
luas["KPH Delta"] = 6.5
print("Jumlah petak:", len(petak))
print("Luas KPH Delta:", luas["KPH Delta"])
HASIL
Jumlah petak: 4
Luas KPH Delta: 6.5

Cek paham #

  1. Apa nomor nilai pertama dalam sebuah daftar?
  2. Apa beda daftar dan kamus dalam cara mencari nilai?
  3. Mengapa luas.get("KPH Omega", 0) lebih aman daripada luas["KPH Omega"] untuk kunci yang belum tentu ada?

Jawaban.

  1. Nomor 0.
  2. Daftar dicari lewat nomor urut, kamus dicari lewat kunci.
  3. get mengembalikan nilai cadangan bila kunci tidak ada, sedangkan tanda kurung siku langsung menimbulkan KeyError.

Kesalahan umum #

  • Menghitung dari 1. Nilai ketiga bernomor 2, bukan 3. Perbaikan: hitung dari nol.
  • Salah kurung. Kurung siku untuk daftar, kurung biasa untuk tuple, kurung kurawal untuk kamus dan set. Perbaikan: lihat bentuk kurung di awal tiap contoh.
  • Mengira set berurutan. Set tidak menjamin urutan. Perbaikan: bungkus dengan sorted(...) bila butuh urutan.

Ringkasan dan latihan #

  • Daftar [ ]: berurutan, bernomor mulai 0, boleh diubah.
  • Tuple ( ): berurutan, tidak boleh diubah.
  • Set: tanpa kembar, tanpa urutan.
  • Kamus { }: pasangan kunci dan nilai, dicari lewat kunci.

Latihan. Buat daftar berisi lima jenis tanaman (boleh ada yang kembar). Tampilkan jumlah seluruhnya, lalu jumlah jenis yang berbeda.

Tabel perbandingan: empat jenis kumpulan nilai #

JenisTulisanCara mengambilCocok untuk
Daftar["a", "b"]daftar[0]Urutan yang boleh berubah
Tuple("a", "b")tuple[0]Pasangan tetap, misalnya koordinat
Set{"a", "b"}set tidak bernomorMenyaring nilai kembar
Kamus{"a": 1}kamus["a"]Mencari lewat nama