Sesi 6: List dan Tuple (Struktur Data Dasar)
Penyimpanan Koleksi Data: Mengelola data multivariabel dan urutan (array dinamis) menggunakan List dan Tuple.
I. Ulasan: Kebutuhan Data Kolektif
Dalam sains, kita jarang bekerja dengan satu nilai. Data sering kali berupa urutan (seperti deret waktu), vektor, atau set data eksperimen. Struktur data List dan Tuple menyediakan fondasi untuk mengelola koleksi nilai ini secara efisien.
Perbedaan Krusial: Mutabilitas
| Fitur | List (Daftar) | Tuple (Tupel) |
|---|---|---|
| Simbol Kunci | Kurung siku: [ ] | Kurung biasa: ( ) |
| Mutabilitas (Dapat Diubah) | Mutable (Dapat ditambah, dihapus, diubah nilainya). | Immutable (Tidak dapat diubah setelah dibuat). |
| Aplikasi Saintifik | Menyimpan data eksperimen yang sedang direkam atau diolah. | Menyimpan konstanta (misalnya, koordinat titik P(x, y)). |
Indexing dan Slicing
Kedua struktur data ini dapat diakses menggunakan indeks (dimulai dari 0). Slicing ([start:stop:step]) adalah teknik yang sangat kuat untuk mengambil sebagian dari set data, yang sangat berguna dalam analisis urutan data.
II. Contoh Manual: Manipulasi Data Eksperimen (List)
Kita memiliki 5 hasil pengukuran Tegangan (Volt) dan ingin menghitung rata-rata serta membuang nilai ekstrem (outlier).
2.1. Langkah Manual pada List
Tegangan = [10.2, 10.5, 9.9, 15.0, 10.4]
LANGKAH 1: Sortir Data (Olah List)
Data terurut = [9.9, 10.2, 10.4, 10.5, 15.0]
LANGKAH 2: Buang Outlier (Hapus elemen)
Buang nilai min (9.9) dan maks (15.0).
Data Bersih = [10.2, 10.4, 10.5]
LANGKAH 3: Hitung Rata-Rata
(10.2 + 10.4 + 10.5) / 3 ≈ 10.37
Proses ini membutuhkan List yang Mutable (dapat diubah/disortir) agar kita bisa membersihkan data sebelum komputasi utama.
III. Kode Praktik (Google Colab)
3.1. Kode Sederhana: Manipulasi Data Eksperimen (List)
Menggunakan metode append() dan pop() untuk memanipulasi data yang masuk.
# Data pengukuran awal (List)
data_gaya = [5.1, 4.9, 5.0, 5.2] # Newton
print(f"Data Awal: {data_gaya}")
# Menambahkan hasil pengukuran baru (Mutable)
data_gaya.append(4.8)
print(f"Data setelah append: {data_gaya}")
# Menghapus elemen terakhir karena dicurigai error
data_gaya.pop()
print(f"Data setelah pop: {data_gaya}")
# Akses elemen: data_gaya[indeks]
print(f"Nilai pengukuran ke-3 (indeks 2): {data_gaya[2]}")
Data Awal: [5.1, 4.9, 5.0, 5.2] Data setelah append: [5.1, 4.9, 5.0, 5.2, 4.8] Data setelah pop: [5.1, 4.9, 5.0, 5.2] Nilai pengukuran ke-3 (indeks 2): 5.0
3.2. Kode Kompleks (Terarah AI/Math): Representasi Vektor dan Konstanta Fisika (Tuple)
Koordinat Vektor awal ($V_{awal}$) harus tetap (immutable), sehingga Tuple digunakan. List digunakan untuk merekam Vektor hasil transformasi ($V_{transform}$).
# Tuple: Menyimpan Vektor Awal (Immutable - tidak bisa diubah)
vektor_awal = (3, 4, 0)
print(f"Vektor Awal (Tuple): {vektor_awal}")
# Tuple: Menyimpan Konstanta Fisika (c, G)
KONSTANTA_FISIKA = (299792458.0, 6.674e-11) # (c, G)
# List: Menyimpan hasil-hasil transformasi (Mutable)
vektor_transformasi = []
# Operasi pada Tuple
magnitude = (vektor_awal[0]**2 + vektor_awal[1]**2 + vektor_awal[2]**2)**0.5
print(f"Magnitude Vektor: {magnitude:.1f}")
# Operasi yang menghasilkan List baru (Transformasi Skalar)
for komponen in vektor_awal:
# Mengalikan setiap komponen dengan skalar 2.5
nilai_transform = komponen * 2.5
vektor_transformasi.append(nilai_transform)
print(f"Vektor Transformasi (List): {vektor_transformasi}")
Vektor Awal (Tuple): (3, 4, 0) Magnitude Vektor: 5.0 Vektor Transformasi (List): [7.5, 10.0, 0.0]
3.3. Kode Kompleks: Pembersihan Outlier dengan Slicing (Pre-Processing AI)
Sebelum pelatihan model AI atau analisis data saintifik, nilai ekstrem (outlier) sering harus dibuang. Proses ini melibatkan pengurutan (List Mutable) dan pemotongan (Slicing).
# Data Pengamatan (List) dengan 1 outlier (1.2) dan 1 error (25.0)
data_pengamatan = [1.02, 1.05, 0.98, 1.20, 25.0, 1.01, 1.03]
print(f"Data Awal ({len(data_pengamatan)} titik): {data_pengamatan}")
# List MUTABLE - Urutkan data
data_pengamatan.sort()
print(f"Data Terurut: {data_pengamatan}")
# Slicing: Hapus 20% data dari kedua ujung (dianggap outlier/error)
# Contoh sederhana: Hapus 1 nilai terkecil (indeks 0) dan 1 nilai terbesar (indeks -1)
# data_bersih mengambil dari indeks 1 sampai elemen sebelum indeks terakhir.
data_bersih = data_pengamatan[1:-1]
# Hitung Rata-Rata Data Bersih
rata_rata = sum(data_bersih) / len(data_bersih)
print("-" * 20)
print(f"Data Bersih ({len(data_bersih)} titik): {data_bersih}")
print(f"Rata-Rata Data Bersih: {rata_rata:.4f}")
Data Awal (7 titik): [1.02, 1.05, 0.98, 1.2, 25.0, 1.01, 1.03] Data Terurut: [0.98, 1.01, 1.02, 1.03, 1.05, 1.2, 25.0] -------------------- Data Bersih (5 titik): [1.01, 1.02, 1.03, 1.05, 1.2] Rata-Rata Data Bersih: 1.0620
IV. Penugasan / PR Sesi 6: Koordinat Gerak Parabola
Tugas ini menggunakan Tuple untuk koordinat awal dan List untuk menyimpan data pergeseran yang dihitung menggunakan perulangan (Sesi 5).
- Tuple (Immutable): Definisikan POSISI_AWAL sebagai Tuple (10.0, 20.0, 5.0) untuk (x, y, z).
- List (Mutable): Inisialisasi DATA_PERGESERAN sebagai List kosong.
- Perulangan (for): Gunakan for loop untuk 5 kali iterasi, di setiap iterasi hitung pergeseran:
- Δx = 0.5 × i
- Δy = 1.0 × i
- Penyimpanan: Setelah menghitung (Δx, Δy), simpan pergeseran tersebut sebagai Tuple baru, lalu tambahkan Tuple tersebut ke DATA_PERGESERAN menggunakan append().
- Output: Cetak DATA_PERGESERAN.