Modul Pembelajaran Python Pemula (Bagian 3): Struktur Data Koleksi Mendalam — List, Tuple, Set, Dictionary, dan List/Dict Comprehensions
Pengantar Modul & Taksonomi Koleksi Python
Dalam pengembangan perangkat lunak modern, memilih Struktur Data yang tepat adalah faktor penentu utama antara aplikasi yang berkinerja tinggi, hemat memori, dan mudah diskalakan, atau aplikasi yang lambat dan boros sumber daya.
Python menyediakan 4 tipe struktur data koleksi bawaan (Built-in Data Collections) yang sangat tangguh:
- Lists (
list): Urutan terurut (ordered), dapat diubah (mutable), mengizinkan duplikasi elemen.
- Tuples (
tuple): Urutan terurut (ordered), tidak dapat diubah (immutable), hemat memori dan cepat.
- Sets (
set): Himpunan tidak berurutan (unordered), unik (tanpa duplikasi), mendukung operasi aljabar himpunan dengan kompleksitas lookup $O(1)$.
- Dictionaries (
dict): Pemetaan pasangan kunci-nilai (key-value mappings), terurut berdasarkan urutan penyisipan (sejak Python 3.7+), dengan pencarian berbasis Hash Table berkecepatan tinggi $O(1)$.
Bagian 3 ini akan membedah secara menyeluruh arsitektur internal, metode operasi, teknik slicing lanjut, manajemen memori (shallow copy vs. deep copy), serta kekuatan ekspresif dari Comprehensions.
======================================================================================================
TAKSONOMI STRUKTUR DATA KOLEKSI BAWAAN PYTHON 3
======================================================================================================
Karakteristik | List [ ] | Tuple ( ) | Set { } | Dict {k: v}
===================+======================+=====================+======================+======================
Order Preserved | YES | YES | NO | YES (Python 3.7+)
Mutability | MUTABLE | IMMUTABLE | MUTABLE | MUTABLE
Duplication | ALLOWED | ALLOWED | DISALLOWED (Unique) | UNIQUE KEYS
Indexing & Slicing | YES (O(1)) | YES (O(1)) | NO | BY KEY (O(1))
Underlying C Type | Dynamic Array | Fixed Array | Hash Table | Hash Table
Lookup Complexity | O(n) Linear | O(n) Linear | O(1) Constant | O(1) Constant
======================================================================================================
Modul 1: Struktur Data List (list)
1.1 Karakteristik Internal Dynamic Array
List di CPython diimplementasikan sebagai Dynamic Array of Object References (Array Dinamis berisi pointer referensi). List tidak menyimpan data langsung di dalam slot arraynya, melainkan menyimpan pointer ke objek Python di heap memori.
Hal ini memungkinkan list di Python bersifat heterogen (dapat menampung berbagai tipe data sekaligus dalam satu koleksi).
<span class="token comment"># Inisialisasi List Heterogen</span>
koleksi_campuran <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"Server-01"</span><span class="token punctuation">,</span> <span class="token number">8080</span><span class="token punctuation">,</span> <span class="token boolean">True</span><span class="token punctuation">,</span> <span class="token number">3.14159</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">"Sub-List"</span><span class="token punctuation">,</span> <span class="token number">42</span><span class="token punctuation">]</span><span class="token punctuation">]</span>
<span class="token comment"># Akses Elemen via Indexing</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Elemen Pertama [0]:"</span><span class="token punctuation">,</span> koleksi_campuran<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Elemen Terakhir [-1]:"</span><span class="token punctuation">,</span> koleksi_campuran<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Sub-elemen bersarang [-1][0]:"</span><span class="token punctuation">,</span> koleksi_campuran<span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
1.2 Metode-Metode Mutasi List Terpenting
frameworks <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"Django"</span><span class="token punctuation">,</span> <span class="token string">"Flask"</span><span class="token punctuation">]</span>
<span class="token comment"># 1. Menambah Elemen: append() vs extend() vs insert()</span>
frameworks<span class="token punctuation">.</span>append<span class="token punctuation">(</span><span class="token string">"FastAPI"</span><span class="token punctuation">)</span> <span class="token comment"># Menambah 1 elemen di akhir</span>
frameworks<span class="token punctuation">.</span>extend<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">"Tornado"</span><span class="token punctuation">,</span> <span class="token string">"Sanic"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Menggabungkan seluruh isi iterable</span>
frameworks<span class="token punctuation">.</span>insert<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">"Pyramid"</span><span class="token punctuation">)</span> <span class="token comment"># Menyisipkan pada indeks tertentu</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Setelah Penambahan:"</span><span class="token punctuation">,</span> frameworks<span class="token punctuation">)</span>
<span class="token comment"># 2. Menghapus Elemen: pop() vs remove() vs clear()</span>
elemen_terakhir <span class="token operator">=</span> frameworks<span class="token punctuation">.</span>pop<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># Menghapus & mengembalikan elemen terakhir (Sanic)</span>
elemen_indeks1 <span class="token operator">=</span> frameworks<span class="token punctuation">.</span>pop<span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token comment"># Menghapus pada indeks 1 (Pyramid)</span>
frameworks<span class="token punctuation">.</span>remove<span class="token punctuation">(</span><span class="token string">"Flask"</span><span class="token punctuation">)</span> <span class="token comment"># Menghapus kemunculan pertama nilai 'Flask'</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Setelah Dihapus: </span><span class="token interpolation"><span class="token punctuation">{</span>frameworks<span class="token punctuation">}</span></span><span class="token string"> (Pop: </span><span class="token interpolation"><span class="token punctuation">{</span>elemen_terakhir<span class="token punctuation">}</span></span><span class="token string">, </span><span class="token interpolation"><span class="token punctuation">{</span>elemen_indeks1<span class="token punctuation">}</span></span><span class="token string">)"</span></span><span class="token punctuation">)</span>
<span class="token comment"># 3. Pencarian dan Penghitungan</span>
indeks_django <span class="token operator">=</span> frameworks<span class="token punctuation">.</span>index<span class="token punctuation">(</span><span class="token string">"Django"</span><span class="token punctuation">)</span>
jumlah_fastapi <span class="token operator">=</span> frameworks<span class="token punctuation">.</span>count<span class="token punctuation">(</span><span class="token string">"FastAPI"</span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Indeks Django: </span><span class="token interpolation"><span class="token punctuation">{</span>indeks_django<span class="token punctuation">}</span></span><span class="token string">, Frekuensi FastAPI: </span><span class="token interpolation"><span class="token punctuation">{</span>jumlah_fastapi<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span>
<span class="token comment"># 4. Pengurutan: sort() (In-place) vs sorted() (Mengembalikan List Baru)</span>
angka_acak <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">45</span><span class="token punctuation">,</span> <span class="token number">12</span><span class="token punctuation">,</span> <span class="token number">89</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">77</span><span class="token punctuation">,</span> <span class="token number">24</span><span class="token punctuation">]</span>
angka_acak<span class="token punctuation">.</span>sort<span class="token punctuation">(</span>reverse<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span> <span class="token comment"># Mengubah list asli secara in-place</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"List setelah sort() descending:"</span><span class="token punctuation">,</span> angka_acak<span class="token punctuation">)</span>
1.3 Perangkap Memori: Shallow Copy vs Deep Copy
Ketika Anda menduplikasi list menggunakan operator assignment (b = a), Anda hanya menduplikasi pointer referensinya, bukan objek datanya.
<span class="token keyword">import</span> copy
<span class="token comment"># 1. Masalah Referensi Bersama (Alias)</span>
original <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">]</span>
alias <span class="token operator">=</span> original
alias<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">999</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Original ikut termodifikasi:"</span><span class="token punctuation">,</span> original<span class="token punctuation">)</span> <span class="token comment"># [[999, 2], [3, 4]]</span>
<span class="token comment"># 2. Shallow Copy (.copy() atau slicing [:])</span>
<span class="token comment"># Hanya menduplikasi layer terluar, objek bersarang tetap berbagi referensi!</span>
shallow <span class="token operator">=</span> original<span class="token punctuation">.</span>copy<span class="token punctuation">(</span><span class="token punctuation">)</span>
shallow<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">888</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Original layer dalam ikut berubah pada shallow copy:"</span><span class="token punctuation">,</span> original<span class="token punctuation">)</span>
<span class="token comment"># 3. Deep Copy (copy.deepcopy)</span>
<span class="token comment"># Menduplikasi seluruh struktur objek dan semua anak bersarangnya secara rekursif murni!</span>
original_bersih <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">10</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">30</span><span class="token punctuation">,</span> <span class="token number">40</span><span class="token punctuation">]</span><span class="token punctuation">]</span>
deep <span class="token operator">=</span> copy<span class="token punctuation">.</span>deepcopy<span class="token punctuation">(</span>original_bersih<span class="token punctuation">)</span>
deep<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">777</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Original Bersih:"</span><span class="token punctuation">,</span> original_bersih<span class="token punctuation">)</span> <span class="token comment"># [[10, 20], [30, 40]] (Tetap aman!)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Deep Copy :"</span><span class="token punctuation">,</span> deep<span class="token punctuation">)</span> <span class="token comment"># [[777, 20], [30, 40]]</span>
Modul 2: Struktur Data Tuple (tuple)
2.1 Mengapa Menggunakan Tuple Jika Ada List?
Tuple adalah urutan elemen yang bersifat Immutable.
Keunggulan Tuple dibandingkan List:
- Efisiensi Memori & Kecepatan: Karena ukurannya tetap, CPython mengalokasikan memori tuple secara presisi tanpa cadangan ekspansi, menjadikannya lebih cepat dalam iterasi dan alokasi.
- Keamanan Data (Write-Protection): Menjamin bahwa data konfigurasi atau koordinat tidak akan termutasi secara tidak sengaja di bagian lain dari program.
- Dapat Digunakan sebagai Kunci Dictionary: Karena bersifat hashable (jika seluruh elemennya immutable).
<span class="token comment"># Inisialisasi Tuple</span>
koordinat_gps <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">6.2088</span><span class="token punctuation">,</span> <span class="token number">106.8456</span><span class="token punctuation">)</span>
konfigurasi_db <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token string">"localhost"</span><span class="token punctuation">,</span> <span class="token number">3306</span><span class="token punctuation">,</span> <span class="token string">"root"</span><span class="token punctuation">,</span> <span class="token string">"rahasia2026"</span><span class="token punctuation">)</span>
<span class="token comment"># Tuple 1 elemen wajib memiliki koma di akhir!</span>
tuple_satu_elemen <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token number">42</span><span class="token punctuation">,</span><span class="token punctuation">)</span>
bukan_tuple <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token number">42</span><span class="token punctuation">)</span> <span class="token comment"># Ini hanyalah integer 42 dalam kurung!</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Tipe tuple_satu_elemen:"</span><span class="token punctuation">,</span> <span class="token builtin">type</span><span class="token punctuation">(</span>tuple_satu_elemen<span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Tipe bukan_tuple :"</span><span class="token punctuation">,</span> <span class="token builtin">type</span><span class="token punctuation">(</span>bukan_tuple<span class="token punctuation">)</span><span class="token punctuation">)</span>
2.2 Tuple Packing, Unpacking, dan Starred Expressions (*)
<span class="token comment"># 1. Tuple Packing & Unpacking Dasar</span>
data_karyawan <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token string">"Alexander"</span><span class="token punctuation">,</span> <span class="token number">32</span><span class="token punctuation">,</span> <span class="token string">"DevOps Lead"</span><span class="token punctuation">,</span> <span class="token number">25_000_000</span><span class="token punctuation">)</span>
nama<span class="token punctuation">,</span> umur<span class="token punctuation">,</span> posisi<span class="token punctuation">,</span> gaji <span class="token operator">=</span> data_karyawan
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Unpacking: </span><span class="token interpolation"><span class="token punctuation">{</span>nama<span class="token punctuation">}</span></span><span class="token string"> bekerja sebagai </span><span class="token interpolation"><span class="token punctuation">{</span>posisi<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span>
<span class="token comment"># 2. Swap Variabel Elegan Tanpa Variabel Sementara</span>
a <span class="token operator">=</span> <span class="token number">100</span>
b <span class="token operator">=</span> <span class="token number">200</span>
a<span class="token punctuation">,</span> b <span class="token operator">=</span> b<span class="token punctuation">,</span> a <span class="token comment"># Di balik layar terjadi tuple packing (b, a) lalu di-unpack ke (a, b)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Setelah Swap: a=</span><span class="token interpolation"><span class="token punctuation">{</span>a<span class="token punctuation">}</span></span><span class="token string">, b=</span><span class="token interpolation"><span class="token punctuation">{</span>b<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span>
<span class="token comment"># 3. Starred Expression (*) untuk Menangkap Sisa Elemen</span>
hasil_skor <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">98</span><span class="token punctuation">,</span> <span class="token number">92</span><span class="token punctuation">,</span> <span class="token number">88</span><span class="token punctuation">,</span> <span class="token number">85</span><span class="token punctuation">,</span> <span class="token number">79</span><span class="token punctuation">,</span> <span class="token number">74</span><span class="token punctuation">,</span> <span class="token number">60</span><span class="token punctuation">]</span>
juara_1<span class="token punctuation">,</span> juara_2<span class="token punctuation">,</span> juara_3<span class="token punctuation">,</span> <span class="token operator">*</span>peserta_lainnya <span class="token operator">=</span> hasil_skor
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Podium Emas : </span><span class="token interpolation"><span class="token punctuation">{</span>juara_1<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Podium Perak : </span><span class="token interpolation"><span class="token punctuation">{</span>juara_2<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Podium Perunggu: </span><span class="token interpolation"><span class="token punctuation">{</span>juara_3<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Peserta Lainnya (List): </span><span class="token interpolation"><span class="token punctuation">{</span>peserta_lainnya<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span>
2.3 Named Tuples (collections.namedtuple)
Untuk data terstruktur yang mudah dibaca tanpa overhead class penuh:
<span class="token keyword">from</span> collections <span class="token keyword">import</span> namedtuple
<span class="token comment"># Definisikan template tipe TitikKoordinat</span>
Titik2D <span class="token operator">=</span> namedtuple<span class="token punctuation">(</span><span class="token string">"Titik2D"</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">"x"</span><span class="token punctuation">,</span> <span class="token string">"y"</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
p1 <span class="token operator">=</span> Titik2D<span class="token punctuation">(</span>x<span class="token operator">=</span><span class="token number">15</span><span class="token punctuation">,</span> y<span class="token operator">=</span><span class="token number">30</span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Koordinat: X=</span><span class="token interpolation"><span class="token punctuation">{</span>p1<span class="token punctuation">.</span>x<span class="token punctuation">}</span></span><span class="token string">, Y=</span><span class="token interpolation"><span class="token punctuation">{</span>p1<span class="token punctuation">.</span>y<span class="token punctuation">}</span></span><span class="token string"> (Akses via Nama Properti!)"</span></span><span class="token punctuation">)</span>
Modul 3: Struktur Data Dictionary (dict)
Dictionary adalah struktur data pemetaan asosiatif berbasis Hash Table.
3.1 Operasi dan Metode Esensial Dictionary
user_profile <span class="token operator">=</span> <span class="token punctuation">{</span>
<span class="token string">"user_id"</span><span class="token punctuation">:</span> <span class="token number">1054</span><span class="token punctuation">,</span>
<span class="token string">"username"</span><span class="token punctuation">:</span> <span class="token string">"alex_cyber"</span><span class="token punctuation">,</span>
<span class="token string">"email"</span><span class="token punctuation">:</span> <span class="token string">"alex@unreliablecode.net"</span><span class="token punctuation">,</span>
<span class="token string">"role"</span><span class="token punctuation">:</span> <span class="token string">"admin"</span><span class="token punctuation">,</span>
<span class="token string">"is_active"</span><span class="token punctuation">:</span> <span class="token boolean">True</span>
<span class="token punctuation">}</span>
<span class="token comment"># 1. Mengakses Nilai dengan Aman menggunakan get() (Menghindari KeyError)</span>
<span class="token comment"># Cara Berisiko: user_profile["telepon"] -> Memicu KeyError!</span>
telepon <span class="token operator">=</span> user_profile<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">"telepon"</span><span class="token punctuation">,</span> <span class="token string">"Nomor Belum Diatur"</span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Nomor Telepon:"</span><span class="token punctuation">,</span> telepon<span class="token punctuation">)</span>
<span class="token comment"># 2. Menambah & Memodifikasi Nilai</span>
user_profile<span class="token punctuation">[</span><span class="token string">"role"</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string">"superadmin"</span> <span class="token comment"># Update nilai</span>
user_profile<span class="token punctuation">[</span><span class="token string">"last_login"</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string">"2026-08-29"</span> <span class="token comment"># Menambah kunci baru</span>
<span class="token comment"># 3. Metode setdefault(): Mengambil atau menginisialisasi jika kunci belum ada</span>
user_profile<span class="token punctuation">.</span>setdefault<span class="token punctuation">(</span><span class="token string">"theme"</span><span class="token punctuation">,</span> <span class="token string">"dark_cyber"</span><span class="token punctuation">)</span>
<span class="token comment"># 4. Penggabungan Dictionary Modern (Python 3.9+ Merge Operator | dan |=)</span>
metadata_tambahan <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">"ip_address"</span><span class="token punctuation">:</span> <span class="token string">"192.168.1.100"</span><span class="token punctuation">,</span> <span class="token string">"country"</span><span class="token punctuation">:</span> <span class="token string">"ID"</span><span class="token punctuation">}</span>
merged_profile <span class="token operator">=</span> user_profile <span class="token operator">|</span> metadata_tambahan
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"\nProfil Pengguna Tergabung:"</span><span class="token punctuation">)</span>
<span class="token keyword">for</span> k<span class="token punctuation">,</span> v <span class="token keyword">in</span> merged_profile<span class="token punctuation">.</span>items<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f" </span><span class="token interpolation"><span class="token punctuation">{</span>k<span class="token punctuation">:</span><span class="token format-spec"><15</span><span class="token punctuation">}</span></span><span class="token string"> : </span><span class="token interpolation"><span class="token punctuation">{</span>v<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span>
Modul 4: Struktur Data Set (set & frozenset)
Set adalah koleksi elemen unik tanpa indeks yang diimplementasikan di atas Hash Table.
4.1 Aljabar Himpunan (Set Mathematics)
skill_backend <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">"Python"</span><span class="token punctuation">,</span> <span class="token string">"PostgreSQL"</span><span class="token punctuation">,</span> <span class="token string">"Docker"</span><span class="token punctuation">,</span> <span class="token string">"Redis"</span><span class="token punctuation">,</span> <span class="token string">"Linux"</span><span class="token punctuation">}</span>
skill_devops <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">"Docker"</span><span class="token punctuation">,</span> <span class="token string">"Kubernetes"</span><span class="token punctuation">,</span> <span class="token string">"Linux"</span><span class="token punctuation">,</span> <span class="token string">"Terraform"</span><span class="token punctuation">,</span> <span class="token string">"AWS"</span><span class="token punctuation">}</span>
<span class="token comment"># 1. Union (|): Gabungan seluruh elemen unik</span>
semua_skill <span class="token operator">=</span> skill_backend <span class="token operator">|</span> skill_devops
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Union (Semua Skill) :"</span><span class="token punctuation">,</span> semua_skill<span class="token punctuation">)</span>
<span class="token comment"># 2. Intersection (&): Irisan (Elemen yang dimiliki oleh kedua belah pihak)</span>
skill_bersama <span class="token operator">=</span> skill_backend <span class="token operator">&</span> skill_devops
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Intersection (Skill Irisan):"</span><span class="token punctuation">,</span> skill_bersama<span class="token punctuation">)</span>
<span class="token comment"># 3. Difference (-): Selisih (Ada di backend tapi tidak ada di devops)</span>
backend_murni <span class="token operator">=</span> skill_backend <span class="token operator">-</span> skill_devops
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Difference (Backend Murni) :"</span><span class="token punctuation">,</span> backend_murni<span class="token punctuation">)</span>
<span class="token comment"># 4. Symmetric Difference (^): Elemen unik di salah satu, tapi bukan keduanya</span>
skill_eksklusif <span class="token operator">=</span> skill_backend <span class="token operator">^</span> skill_devops
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Symmetric Difference :"</span><span class="token punctuation">,</span> skill_eksklusif<span class="token punctuation">)</span>
<span class="token comment"># 5. Deduplikasi Data Instan Berkecepatan O(1)</span>
log_ip <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"10.0.0.1"</span><span class="token punctuation">,</span> <span class="token string">"192.168.1.1"</span><span class="token punctuation">,</span> <span class="token string">"10.0.0.1"</span><span class="token punctuation">,</span> <span class="token string">"172.16.0.1"</span><span class="token punctuation">,</span> <span class="token string">"192.168.1.1"</span><span class="token punctuation">]</span>
ip_unik <span class="token operator">=</span> <span class="token builtin">list</span><span class="token punctuation">(</span><span class="token builtin">set</span><span class="token punctuation">(</span>log_ip<span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"IP Unik:"</span><span class="token punctuation">,</span> ip_unik<span class="token punctuation">)</span>
Modul 5: Masterclass Comprehensions
Comprehensions adalah salah satu fitur paling elegan dan Pythonic untuk membangun koleksi baru dari koleksi yang sudah ada secara deklaratif.
5.1 List Comprehensions
<span class="token comment"># Format: [ekspresi for elemen in iterable if kondisi]</span>
angka_dasar <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">9</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">]</span>
<span class="token comment"># 1. Transformasi Kuadrat Hanya Untuk Angka Genap</span>
kuadrat_genap <span class="token operator">=</span> <span class="token punctuation">[</span>x <span class="token operator">**</span> <span class="token number">2</span> <span class="token keyword">for</span> x <span class="token keyword">in</span> angka_dasar <span class="token keyword">if</span> x <span class="token operator">%</span> <span class="token number">2</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">]</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Kuadrat Genap:"</span><span class="token punctuation">,</span> kuadrat_genap<span class="token punctuation">)</span> <span class="token comment"># [4, 16, 36, 64, 100]</span>
<span class="token comment"># 2. Sanitasi dan Normalisasi String Massal</span>
raw_emails <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">" Alex@GMAIL.com "</span><span class="token punctuation">,</span> <span class="token string">"budi.dev@yahoo.com "</span><span class="token punctuation">,</span> <span class="token string">" SITI@UnreliableCode.net "</span><span class="token punctuation">]</span>
clean_emails <span class="token operator">=</span> <span class="token punctuation">[</span>email<span class="token punctuation">.</span>strip<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>lower<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">for</span> email <span class="token keyword">in</span> raw_emails <span class="token keyword">if</span> <span class="token string">"@"</span> <span class="token keyword">in</span> email<span class="token punctuation">]</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Clean Emails:"</span><span class="token punctuation">,</span> clean_emails<span class="token punctuation">)</span>
<span class="token comment"># 3. Nested List Comprehensions (Perataan Matriks / Flattening)</span>
matriks <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">9</span><span class="token punctuation">]</span><span class="token punctuation">]</span>
flattened <span class="token operator">=</span> <span class="token punctuation">[</span>elemen <span class="token keyword">for</span> baris <span class="token keyword">in</span> matriks <span class="token keyword">for</span> elemen <span class="token keyword">in</span> baris<span class="token punctuation">]</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Flattened Matrix:"</span><span class="token punctuation">,</span> flattened<span class="token punctuation">)</span> <span class="token comment"># [1, 2, 3, 4, 5, 6, 7, 8, 9]</span>
5.2 Dictionary & Set Comprehensions
<span class="token comment"># 1. Dictionary Comprehensions</span>
nama_siswa <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"Budi"</span><span class="token punctuation">,</span> <span class="token string">"Siti"</span><span class="token punctuation">,</span> <span class="token string">"Ahmad"</span><span class="token punctuation">,</span> <span class="token string">"Dewi"</span><span class="token punctuation">]</span>
nilai_siswa <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">88</span><span class="token punctuation">,</span> <span class="token number">95</span><span class="token punctuation">,</span> <span class="token number">72</span><span class="token punctuation">,</span> <span class="token number">91</span><span class="token punctuation">]</span>
buku_nilai <span class="token operator">=</span> <span class="token punctuation">{</span>nama<span class="token punctuation">:</span> nilai <span class="token keyword">for</span> nama<span class="token punctuation">,</span> nilai <span class="token keyword">in</span> <span class="token builtin">zip</span><span class="token punctuation">(</span>nama_siswa<span class="token punctuation">,</span> nilai_siswa<span class="token punctuation">)</span> <span class="token keyword">if</span> nilai <span class="token operator">>=</span> <span class="token number">75</span><span class="token punctuation">}</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Siswa Lulus (Dict Comp):"</span><span class="token punctuation">,</span> buku_nilai<span class="token punctuation">)</span>
<span class="token comment"># Membalik Pasangan Key-Value:</span>
kamus_kode <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">"ID"</span><span class="token punctuation">:</span> <span class="token string">"Indonesia"</span><span class="token punctuation">,</span> <span class="token string">"US"</span><span class="token punctuation">:</span> <span class="token string">"United States"</span><span class="token punctuation">,</span> <span class="token string">"JP"</span><span class="token punctuation">:</span> <span class="token string">"Japan"</span><span class="token punctuation">}</span>
kode_terbalik <span class="token operator">=</span> <span class="token punctuation">{</span>negara<span class="token punctuation">:</span> kode <span class="token keyword">for</span> kode<span class="token punctuation">,</span> negara <span class="token keyword">in</span> kamus_kode<span class="token punctuation">.</span>items<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">}</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Kamus Terbalik:"</span><span class="token punctuation">,</span> kode_terbalik<span class="token punctuation">)</span>
<span class="token comment"># 2. Set Comprehensions</span>
kalimat <span class="token operator">=</span> <span class="token string">"Belajar pemrograman Python menyenangkan bersama komunitas pengembang Indonesia"</span>
huruf_vokal_unik <span class="token operator">=</span> <span class="token punctuation">{</span>char<span class="token punctuation">.</span>lower<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">for</span> char <span class="token keyword">in</span> kalimat <span class="token keyword">if</span> char<span class="token punctuation">.</span>lower<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">in</span> <span class="token string">"aiueo"</span><span class="token punctuation">}</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Vokal Unik dalam Kalimat (Set Comp):"</span><span class="token punctuation">,</span> huruf_vokal_unik<span class="token punctuation">)</span>
Modul 6: Modul Koleksi Lanjutan (collections)
Modul bawaan collections menyediakan tipe data spesialis berkinerja tinggi:
<span class="token keyword">from</span> collections <span class="token keyword">import</span> Counter<span class="token punctuation">,</span> defaultdict<span class="token punctuation">,</span> deque
<span class="token comment"># 1. Counter: Menghitung frekuensi kemunculan elemen otomatis</span>
log_aktivitas <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">"LOGIN"</span><span class="token punctuation">,</span> <span class="token string">"CLICK"</span><span class="token punctuation">,</span> <span class="token string">"LOGIN"</span><span class="token punctuation">,</span> <span class="token string">"VIEW"</span><span class="token punctuation">,</span> <span class="token string">"PURCHASE"</span><span class="token punctuation">,</span> <span class="token string">"LOGIN"</span><span class="token punctuation">,</span> <span class="token string">"CLICK"</span><span class="token punctuation">]</span>
frekuensi <span class="token operator">=</span> Counter<span class="token punctuation">(</span>log_aktivitas<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Aktivitas Paling Sering (Top 2):"</span><span class="token punctuation">,</span> frekuensi<span class="token punctuation">.</span>most_common<span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token comment"># 2. defaultdict: Mencegah KeyError saat mengelompokkan data</span>
pengelompokan_kota <span class="token operator">=</span> defaultdict<span class="token punctuation">(</span><span class="token builtin">list</span><span class="token punctuation">)</span>
data_penduduk <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">(</span><span class="token string">"Jakarta"</span><span class="token punctuation">,</span> <span class="token string">"Budi"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">"Surabaya"</span><span class="token punctuation">,</span> <span class="token string">"Siti"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">"Jakarta"</span><span class="token punctuation">,</span> <span class="token string">"Alexander"</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token string">"Bandung"</span><span class="token punctuation">,</span> <span class="token string">"Dewi"</span><span class="token punctuation">)</span><span class="token punctuation">]</span>
<span class="token keyword">for</span> kota<span class="token punctuation">,</span> nama <span class="token keyword">in</span> data_penduduk<span class="token punctuation">:</span>
pengelompokan_kota<span class="token punctuation">[</span>kota<span class="token punctuation">]</span><span class="token punctuation">.</span>append<span class="token punctuation">(</span>nama<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Grouping Kota:"</span><span class="token punctuation">,</span> <span class="token builtin">dict</span><span class="token punctuation">(</span>pengelompokan_kota<span class="token punctuation">)</span><span class="token punctuation">)</span>
<span class="token comment"># 3. deque (Double-Ended Queue): Antrean Cepat O(1) untuk Append & Pop dari Kedua Sisi</span>
antrean_job <span class="token operator">=</span> deque<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">"Job-1"</span><span class="token punctuation">,</span> <span class="token string">"Job-2"</span><span class="token punctuation">,</span> <span class="token string">"Job-3"</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
antrean_job<span class="token punctuation">.</span>append<span class="token punctuation">(</span><span class="token string">"Job-4"</span><span class="token punctuation">)</span> <span class="token comment"># Tambah di kanan</span>
antrean_job<span class="token punctuation">.</span>appendleft<span class="token punctuation">(</span><span class="token string">"VIP-Job"</span><span class="token punctuation">)</span> <span class="token comment"># Tambah prioritas di kiri</span>
antrean_job<span class="token punctuation">.</span>popleft<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># Ambil dari kiri secara instan O(1)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Sisa Antrean Deque:"</span><span class="token punctuation">,</span> <span class="token builtin">list</span><span class="token punctuation">(</span>antrean_job<span class="token punctuation">)</span><span class="token punctuation">)</span>
Modul 7: Studi Kasus Nyata: Sistem Analisis Data Penjualan E-Commerce
Mari kita satukan penguasaan List, Dict, Set, dan Comprehensions dalam memproses data transaksi nyata:
transaksi_ecommerce <span class="token operator">=</span> <span class="token punctuation">[</span>
<span class="token punctuation">{</span><span class="token string">"trx_id"</span><span class="token punctuation">:</span> <span class="token string">"TRX-101"</span><span class="token punctuation">,</span> <span class="token string">"user"</span><span class="token punctuation">:</span> <span class="token string">"budi"</span><span class="token punctuation">,</span> <span class="token string">"kategori"</span><span class="token punctuation">:</span> <span class="token string">"Elektronik"</span><span class="token punctuation">,</span> <span class="token string">"item"</span><span class="token punctuation">:</span> <span class="token string">"Headphone ANC"</span><span class="token punctuation">,</span> <span class="token string">"harga"</span><span class="token punctuation">:</span> <span class="token number">1_200_000</span><span class="token punctuation">,</span> <span class="token string">"qty"</span><span class="token punctuation">:</span> <span class="token number">2</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span><span class="token string">"trx_id"</span><span class="token punctuation">:</span> <span class="token string">"TRX-102"</span><span class="token punctuation">,</span> <span class="token string">"user"</span><span class="token punctuation">:</span> <span class="token string">"siti"</span><span class="token punctuation">,</span> <span class="token string">"kategori"</span><span class="token punctuation">:</span> <span class="token string">"Buku"</span><span class="token punctuation">,</span> <span class="token string">"item"</span><span class="token punctuation">:</span> <span class="token string">"Clean Code Python"</span><span class="token punctuation">,</span> <span class="token string">"harga"</span><span class="token punctuation">:</span> <span class="token number">250_000</span><span class="token punctuation">,</span> <span class="token string">"qty"</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span><span class="token string">"trx_id"</span><span class="token punctuation">:</span> <span class="token string">"TRX-103"</span><span class="token punctuation">,</span> <span class="token string">"user"</span><span class="token punctuation">:</span> <span class="token string">"alex"</span><span class="token punctuation">,</span> <span class="token string">"kategori"</span><span class="token punctuation">:</span> <span class="token string">"Elektronik"</span><span class="token punctuation">,</span> <span class="token string">"item"</span><span class="token punctuation">:</span> <span class="token string">"Mechanical Keyboard"</span><span class="token punctuation">,</span> <span class="token string">"harga"</span><span class="token punctuation">:</span> <span class="token number">1_800_000</span><span class="token punctuation">,</span> <span class="token string">"qty"</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span><span class="token string">"trx_id"</span><span class="token punctuation">:</span> <span class="token string">"TRX-104"</span><span class="token punctuation">,</span> <span class="token string">"user"</span><span class="token punctuation">:</span> <span class="token string">"budi"</span><span class="token punctuation">,</span> <span class="token string">"kategori"</span><span class="token punctuation">:</span> <span class="token string">"Pakaian"</span><span class="token punctuation">,</span> <span class="token string">"item"</span><span class="token punctuation">:</span> <span class="token string">"Hoodie Tech"</span><span class="token punctuation">,</span> <span class="token string">"harga"</span><span class="token punctuation">:</span> <span class="token number">450_000</span><span class="token punctuation">,</span> <span class="token string">"qty"</span><span class="token punctuation">:</span> <span class="token number">3</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span><span class="token string">"trx_id"</span><span class="token punctuation">:</span> <span class="token string">"TRX-105"</span><span class="token punctuation">,</span> <span class="token string">"user"</span><span class="token punctuation">:</span> <span class="token string">"dewi"</span><span class="token punctuation">,</span> <span class="token string">"kategori"</span><span class="token punctuation">:</span> <span class="token string">"Elektronik"</span><span class="token punctuation">,</span> <span class="token string">"item"</span><span class="token punctuation">:</span> <span class="token string">"Monitor 4K"</span><span class="token punctuation">,</span> <span class="token string">"harga"</span><span class="token punctuation">:</span> <span class="token number">6_500_000</span><span class="token punctuation">,</span> <span class="token string">"qty"</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">{</span><span class="token string">"trx_id"</span><span class="token punctuation">:</span> <span class="token string">"TRX-106"</span><span class="token punctuation">,</span> <span class="token string">"user"</span><span class="token punctuation">:</span> <span class="token string">"siti"</span><span class="token punctuation">,</span> <span class="token string">"kategori"</span><span class="token punctuation">:</span> <span class="token string">"Elektronik"</span><span class="token punctuation">,</span> <span class="token string">"item"</span><span class="token punctuation">:</span> <span class="token string">"Mouse Wireless"</span><span class="token punctuation">,</span> <span class="token string">"harga"</span><span class="token punctuation">:</span> <span class="token number">350_000</span><span class="token punctuation">,</span> <span class="token string">"qty"</span><span class="token punctuation">:</span> <span class="token number">2</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span>
<span class="token keyword">def</span> <span class="token function">analisis_laporan_penjualan</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">:</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"="</span> <span class="token operator">*</span> <span class="token number">65</span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span><span class="token string">'LAPORAN ANALISIS PENJUALAN E-COMMERCE'</span><span class="token punctuation">:</span><span class="token format-spec">^65</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"="</span> <span class="token operator">*</span> <span class="token number">65</span><span class="token punctuation">)</span>
<span class="token comment"># 1. Total Omset Keseluruhan (via Generator Expression)</span>
total_omset <span class="token operator">=</span> <span class="token builtin">sum</span><span class="token punctuation">(</span>item<span class="token punctuation">[</span><span class="token string">"harga"</span><span class="token punctuation">]</span> <span class="token operator">*</span> item<span class="token punctuation">[</span><span class="token string">"qty"</span><span class="token punctuation">]</span> <span class="token keyword">for</span> item <span class="token keyword">in</span> data<span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Total Nilai Penjualan Kotor (Gross): Rp </span><span class="token interpolation"><span class="token punctuation">{</span>total_omset<span class="token punctuation">:</span><span class="token format-spec">,.2f</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span>
<span class="token comment"># 2. Pelanggan Unik (via Set Comprehension)</span>
pembeli_unik <span class="token operator">=</span> <span class="token punctuation">{</span>item<span class="token punctuation">[</span><span class="token string">"user"</span><span class="token punctuation">]</span><span class="token punctuation">.</span>capitalize<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">for</span> item <span class="token keyword">in</span> data<span class="token punctuation">}</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Jumlah Pembeli Unik: </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token builtin">len</span><span class="token punctuation">(</span>pembeli_unik<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string"> (</span><span class="token interpolation"><span class="token punctuation">{</span><span class="token string">', '</span><span class="token punctuation">.</span>join<span class="token punctuation">(</span>pembeli_unik<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">)"</span></span><span class="token punctuation">)</span>
<span class="token comment"># 3. Pengelompokan Omset per Kategori (via defaultdict)</span>
omset_kategori <span class="token operator">=</span> defaultdict<span class="token punctuation">(</span><span class="token builtin">float</span><span class="token punctuation">)</span>
<span class="token keyword">for</span> trx <span class="token keyword">in</span> data<span class="token punctuation">:</span>
subtotal <span class="token operator">=</span> trx<span class="token punctuation">[</span><span class="token string">"harga"</span><span class="token punctuation">]</span> <span class="token operator">*</span> trx<span class="token punctuation">[</span><span class="token string">"qty"</span><span class="token punctuation">]</span>
omset_kategori<span class="token punctuation">[</span>trx<span class="token punctuation">[</span><span class="token string">"kategori"</span><span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator">+=</span> subtotal
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"\nDistribusi Omset Berdasarkan Kategori:"</span><span class="token punctuation">)</span>
<span class="token keyword">for</span> kat<span class="token punctuation">,</span> nominal <span class="token keyword">in</span> <span class="token builtin">sorted</span><span class="token punctuation">(</span>omset_kategori<span class="token punctuation">.</span>items<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> key<span class="token operator">=</span><span class="token keyword">lambda</span> x<span class="token punctuation">:</span> x<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> reverse<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
persentase <span class="token operator">=</span> <span class="token punctuation">(</span>nominal <span class="token operator">/</span> total_omset<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">100</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f" - </span><span class="token interpolation"><span class="token punctuation">{</span>kat<span class="token punctuation">:</span><span class="token format-spec"><15</span><span class="token punctuation">}</span></span><span class="token string"> : Rp </span><span class="token interpolation"><span class="token punctuation">{</span>nominal<span class="token punctuation">:</span><span class="token format-spec">>12,2f</span><span class="token punctuation">}</span></span><span class="token string"> (</span><span class="token interpolation"><span class="token punctuation">{</span>persentase<span class="token punctuation">:</span><span class="token format-spec">>5.1f</span><span class="token punctuation">}</span></span><span class="token string">%)"</span></span><span class="token punctuation">)</span>
<span class="token comment"># 4. Transaksi Bernilai Tinggi (> Rp 1.500.000) via List Comprehension</span>
trx_premium <span class="token operator">=</span> <span class="token punctuation">[</span>
<span class="token punctuation">{</span><span class="token string">"id"</span><span class="token punctuation">:</span> t<span class="token punctuation">[</span><span class="token string">"trx_id"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">"user"</span><span class="token punctuation">:</span> t<span class="token punctuation">[</span><span class="token string">"user"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string">"total"</span><span class="token punctuation">:</span> t<span class="token punctuation">[</span><span class="token string">"harga"</span><span class="token punctuation">]</span> <span class="token operator">*</span> t<span class="token punctuation">[</span><span class="token string">"qty"</span><span class="token punctuation">]</span><span class="token punctuation">}</span>
<span class="token keyword">for</span> t <span class="token keyword">in</span> data <span class="token keyword">if</span> <span class="token punctuation">(</span>t<span class="token punctuation">[</span><span class="token string">"harga"</span><span class="token punctuation">]</span> <span class="token operator">*</span> t<span class="token punctuation">[</span><span class="token string">"qty"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">>=</span> <span class="token number">1_500_000</span>
<span class="token punctuation">]</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"\nDaftar Transaksi Bernilai Tinggi (>= Rp 1.5 Juta):"</span><span class="token punctuation">)</span>
<span class="token keyword">for</span> tp <span class="token keyword">in</span> trx_premium<span class="token punctuation">:</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f" [VIP TRX] </span><span class="token interpolation"><span class="token punctuation">{</span>tp<span class="token punctuation">[</span><span class="token string">'id'</span><span class="token punctuation">]</span><span class="token punctuation">}</span></span><span class="token string"> oleh @</span><span class="token interpolation"><span class="token punctuation">{</span>tp<span class="token punctuation">[</span><span class="token string">'user'</span><span class="token punctuation">]</span><span class="token punctuation">}</span></span><span class="token string"> senilai Rp </span><span class="token interpolation"><span class="token punctuation">{</span>tp<span class="token punctuation">[</span><span class="token string">'total'</span><span class="token punctuation">]</span><span class="token punctuation">:</span><span class="token format-spec">,.2f</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span>
<span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"="</span> <span class="token operator">*</span> <span class="token number">65</span> <span class="token operator">+</span> <span class="token string">"\n"</span><span class="token punctuation">)</span>
analisis_laporan_penjualan<span class="token punctuation">(</span>transaksi_ecommerce<span class="token punctuation">)</span>
Rangkuman Materi Bagian 3
- Pemilihan Koleksi: Gunakan List untuk data terurut yang sering berubah; Tuple untuk data tetap read-only; Set untuk elemen unik dan lookup $O(1)$; Dict untuk pemetaan kunci-nilai.
- Kloning Objek: Gunakan
copy.deepcopy() untuk menduplikasi koleksi bersarang tanpa membagi referensi memori.
- Comprehensions: Manfaatkan List/Dict/Set Comprehensions untuk memfilter dan mentransformasikan data secara deklaratif, cepat, dan bersih.
- Koleksi Spesialis: Modul
collections (Counter, defaultdict, deque) menyediakan alat optimasi kinerja tingkat lanjut.
Lanjutkan ke Modul Pembelajaran Python Pemula (Bagian 4) untuk menguasai Arsitektur Fungsi Tingkat Lanjut, Scope LEGB, Lambda, Decorators, dan Manajemen Eksepsi!
Modul disusun dan diverifikasi oleh Tim Rekayasa Perangkat Lunak UnreliableCode untuk unreliablecode.net