Struktur Data
Bekerja dengan List, Dictionary, Tuple, dan Set di Python
Struktur Data di Python
Python memiliki beberapa struktur data bawaan yang sangat berguna untuk menyimpan dan memanipulasi koleksi data. Mari kita pelajari empat struktur data utama: List, Dictionary, Tuple, dan Set.
List
List adalah koleksi data yang terurut dan bisa diubah (mutable). List dapat berisi berbagai tipe data dan menggunakan index untuk mengakses elemen.
Membuat dan Mengakses List
# Membuat list
buah = ["Apel", "Jeruk", "Mangga", "Pisang"]
print("List buah:", buah)
angka = [1, 2, 3, 4, 5]
mixed = [1, "Python", 3.14, True]
# Mengakses elemen dengan index
print("Buah pertama:", buah[0]) # Apel
print("Buah kedua:", buah[1]) # Jeruk
print("Buah terakhir:", buah[-1]) # Pisang
print("Buah kedua dari belakang:", buah[-2]) # ManggaList Indexing
- Index dimulai dari 0 untuk elemen pertama
- Index negatif menghitung dari belakang:
-1adalah elemen terakhir - Mengakses index yang tidak ada akan menyebabkan
IndexError
Slicing List
buah = ["Apel", "Jeruk", "Mangga", "Pisang", "Anggur"]
# Slicing format: list[start:stop:step]
print(buah[0:2]) # ["Apel", "Jeruk"]
print(buah[1:4]) # ["Jeruk", "Mangga", "Pisang"]
print(buah[:3]) # ["Apel", "Jeruk", "Mangga"] - dari awal sampai index 2
print(buah[2:]) # ["Mangga", "Pisang", "Anggur"] - dari index 2 sampai akhir
print(buah[-2:]) # ["Pisang", "Anggur"] - dua terakhir
print(buah[::2]) # ["Apel", "Mangga", "Anggur"] - setiap 2 elemen
print(buah[::-1]) # Reverse listMemodifikasi List
buah = ["Apel", "Jeruk", "Mangga"]
# Mengubah elemen
buah[1] = "Strawberry"
print(buah) # ["Apel", "Strawberry", "Mangga"]
# Menambah elemen
buah.append("Anggur") # Tambah di akhir
print(buah) # ["Apel", "Strawberry", "Mangga", "Anggur"]
buah.insert(1, "Durian") # Insert di index tertentu
print(buah) # ["Apel", "Durian", "Strawberry", "Mangga", "Anggur"]
# Menggabung list
buah.extend(["Melon", "Semangka"])
print(buah)
# Menghapus elemen
removed = buah.pop() # Hapus dan return elemen terakhir
print(f"Dihapus: {removed}")
buah.pop(1) # Hapus elemen di index 1
buah.remove("Mangga") # Hapus elemen berdasarkan value
del buah[0] # Hapus elemen dengan del
# Clear semua
buah.clear()
print(buah) # []Metode List
buah = ["Apel", "Jeruk", "Mangga", "Pisang", "Apel"]
# Mencari elemen
print("Mangga ada di index:", buah.index("Mangga")) # 2
print("Jumlah Apel:", buah.count("Apel")) # 2
# Cek keberadaan
if "Jeruk" in buah:
print("Jeruk ada di list")
# Length
print("Jumlah buah:", len(buah)) # 5angka = [3, 1, 4, 1, 5, 9, 2, 6]
# Sort (modifikasi list asli)
angka.sort()
print("Sorted:", angka) # [1, 1, 2, 3, 4, 5, 6, 9]
angka.sort(reverse=True)
print("Reversed:", angka) # [9, 6, 5, 4, 3, 2, 1, 1]
# Sorted (return list baru)
angka = [3, 1, 4, 1, 5]
sorted_angka = sorted(angka)
print("Original:", angka) # [3, 1, 4, 1, 5]
print("Sorted copy:", sorted_angka) # [1, 1, 3, 4, 5]
# Reverse
angka.reverse()
print("Reversed:", angka)# Concatenation
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list1 + list2 # [1, 2, 3, 4, 5, 6]
# Repetition
repeat = [0] * 5 # [0, 0, 0, 0, 0]
# Min, Max, Sum
angka = [10, 5, 8, 20, 3]
print("Min:", min(angka)) # 3
print("Max:", max(angka)) # 20
print("Sum:", sum(angka)) # 46
# Copy list
original = [1, 2, 3]
copy = original.copy()
# atau
copy = original[:]List Comprehension
List comprehension adalah cara singkat dan efisien untuk membuat list baru.
# Basic list comprehension
squares = [x**2 for x in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]
# Dengan kondisi
genap = [x for x in range(1, 11) if x % 2 == 0]
print(genap) # [2, 4, 6, 8, 10]
# If-else dalam comprehension
label = ["Genap" if x % 2 == 0 else "Ganjil" for x in range(5)]
print(label) # ['Genap', 'Ganjil', 'Genap', 'Ganjil', 'Genap']
# Nested comprehension
matrix = [[i*j for j in range(1, 4)] for i in range(1, 4)]
print(matrix)
# [[1, 2, 3], [2, 4, 6], [3, 6, 9]]
# List comprehension dari string
kata = "Python"
huruf = [char.upper() for char in kata]
print(huruf) # ['P', 'Y', 'T', 'H', 'O', 'N']List Comprehension Syntax
Format dasar:
[expression for item in iterable if condition]- expression: Apa yang akan masuk ke list
- item: Variable untuk setiap iterasi
- iterable: Collection yang di-iterate
- condition: Filter (opsional)
Nested Lists
# Matrix 2D
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# Mengakses elemen
print(matrix[0]) # [1, 2, 3] - row pertama
print(matrix[1][2]) # 6 - row 1, column 2
# Iterasi nested list
for row in matrix:
for item in row:
print(item, end=" ")
print() # Newline setelah setiap row
# List of dictionaries
mahasiswa = [
{"nama": "Budi", "nilai": 85},
{"nama": "Ani", "nilai": 92},
{"nama": "Citra", "nilai": 78}
]
for mhs in mahasiswa:
print(f"{mhs['nama']}: {mhs['nilai']}")Dictionary
Dictionary adalah koleksi data yang tidak berurutan dan menyimpan data dalam pasangan key-value. Dictionary sangat efisien untuk lookup data.
Membuat dan Mengakses Dictionary
# Membuat dictionary
mahasiswa = {
"nama": "Budi Santoso",
"nim": "20210001",
"jurusan": "Teknik Informatika",
"usia": 20
}
print(mahasiswa)
# Mengakses value dengan key
print("Nama:", mahasiswa["nama"])
print("NIM:", mahasiswa["nim"])
# Mengakses dengan get() (lebih aman)
print("Jurusan:", mahasiswa.get("jurusan"))
print("IPK:", mahasiswa.get("ipk", "Data tidak tersedia")) # Default jika key tidak adaKeyError
Mengakses key yang tidak ada dengan dict[key] akan menyebabkan KeyError. Gunakan dict.get(key) atau cek dengan if key in dict untuk menghindari error.
Memodifikasi Dictionary
mahasiswa = {
"nama": "Budi",
"nim": "20210001",
"usia": 20
}
# Mengubah value
mahasiswa["usia"] = 21
print(mahasiswa)
# Menambah key-value baru
mahasiswa["ipk"] = 3.75
mahasiswa["semester"] = 3
print(mahasiswa)
# Update multiple items
mahasiswa.update({"usia": 22, "kota": "Jakarta"})
print(mahasiswa)
# Menghapus item
del mahasiswa["usia"] # Hapus key tertentu
removed = mahasiswa.pop("nim") # Hapus dan return value
# Clear semua
mahasiswa.clear()Metode Dictionary
mahasiswa = {
"nama": "Budi",
"nim": "20210001",
"jurusan": "Informatika",
"ipk": 3.75
}
# Keys, Values, Items
print("Keys:", list(mahasiswa.keys()))
print("Values:", list(mahasiswa.values()))
print("Items:", list(mahasiswa.items()))
# Cek key existence
if "nama" in mahasiswa:
print("Key 'nama' ada")
# Get with default
semester = mahasiswa.get("semester", 1)
print("Semester:", semester)
# Setdefault - set jika belum ada
mahasiswa.setdefault("kota", "Jakarta")
print(mahasiswa)
# Copy dictionary
copy_mhs = mahasiswa.copy()Iterasi Dictionary
mahasiswa = {
"nama": "Budi",
"nim": "20210001",
"jurusan": "Informatika"
}
# Loop keys (default)
for key in mahasiswa:
print(key, ":", mahasiswa[key])
# Loop keys explicitly
for key in mahasiswa.keys():
print(key)
# Loop values
for value in mahasiswa.values():
print(value)
# Loop items (key-value pairs)
for key, value in mahasiswa.items():
print(f"{key}: {value}")Dictionary Comprehension
# Basic dictionary comprehension
squares = {x: x**2 for x in range(1, 6)}
print(squares) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# Dengan kondisi
genap_squares = {x: x**2 for x in range(1, 11) if x % 2 == 0}
print(genap_squares) # {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
# Dari dua list
keys = ["nama", "usia", "kota"]
values = ["Budi", 20, "Jakarta"]
person = {k: v for k, v in zip(keys, values)}
print(person)
# Swap keys and values
original = {"a": 1, "b": 2, "c": 3}
swapped = {v: k for k, v in original.items()}
print(swapped) # {1: 'a', 2: 'b', 3: 'c'}Nested Dictionaries
# Nested dictionary
kampus = {
"nama": "ITERA",
"fakultas": {
"FTIK": {
"prodi": ["Informatika", "Sistem Informasi"],
"dekan": "Dr. Budi"
},
"FTI": {
"prodi": ["Teknik Elektro", "Teknik Mesin"],
"dekan": "Dr. Ani"
}
},
"alamat": "Lampung"
}
# Mengakses nested value
print("Nama kampus:", kampus["nama"])
print("Prodi FTIK:", kampus["fakultas"]["FTIK"]["prodi"])
print("Dekan FTI:", kampus["fakultas"]["FTI"]["dekan"])
# Iterasi nested dictionary
for fak, info in kampus["fakultas"].items():
print(f"\n{fak}:")
print(f" Prodi: {', '.join(info['prodi'])}")
print(f" Dekan: {info['dekan']}")Tuple
Tuple adalah koleksi data yang terurut dan tidak bisa diubah (immutable). Tuple lebih cepat daripada list dan digunakan untuk data yang tidak boleh berubah.
# Membuat tuple
koordinat = (10, 20)
buah = ("Apel", "Jeruk", "Mangga")
mixed = (1, "Python", 3.14, True)
# Single item tuple (perlu koma!)
single = (5,) # Tuple dengan satu elemen
not_tuple = (5) # Ini integer, bukan tuple!
# Mengakses elemen
print(buah[0]) # Apel
print(buah[-1]) # Mangga
print(buah[1:3]) # ("Jeruk", "Mangga")
# Tuple unpacking
x, y = koordinat
print(f"x={x}, y={y}")
nama, nim, jurusan = ("Budi", "12345", "Informatika")
print(f"Nama: {nama}")
# Operasi tuple
t1 = (1, 2, 3)
t2 = (4, 5, 6)
combined = t1 + t2 # (1, 2, 3, 4, 5, 6)
repeated = t1 * 3 # (1, 2, 3, 1, 2, 3, 1, 2, 3)
# Methods
angka = (1, 2, 2, 3, 2, 4)
print("Count 2:", angka.count(2)) # 3
print("Index of 3:", angka.index(3)) # 3Why Use Tuples?
Keuntungan tuple dibanding list:
- Immutable - Data tidak bisa diubah, lebih aman
- Faster - Lebih cepat untuk iteration
- Can be dictionary keys - List tidak bisa jadi key
- Less memory - Lebih efisien memory
Gunakan tuple untuk:
- Koordinat (x, y), RGB colors (r, g, b)
- Function return multiple values
- Dictionary keys
- Data yang tidak boleh dimodifikasi
Set
Set adalah koleksi data yang tidak berurutan, tidak memiliki duplikat, dan bisa diubah. Set sangat efisien untuk membership testing dan operasi matematika set.
# Membuat set
buah = {"Apel", "Jeruk", "Mangga"}
angka = {1, 2, 3, 4, 5}
# Set dari list (menghapus duplikat)
angka_list = [1, 2, 2, 3, 3, 3, 4]
angka_set = set(angka_list)
print(angka_set) # {1, 2, 3, 4}
# Empty set (harus pakai set(), bukan {})
empty = set() # Benar
# not_set = {} # Ini dictionary, bukan set!
# Menambah elemen
buah.add("Pisang")
buah.add("Apel") # Tidak ditambah karena sudah ada
print(buah)
# Update dengan multiple items
buah.update(["Anggur", "Melon"])
# Menghapus elemen
buah.remove("Jeruk") # Error jika tidak ada
buah.discard("Durian") # Tidak error jika tidak ada
removed = buah.pop() # Hapus random element
buah.clear() # Hapus semuaSet Operations (Matematika)
a = {1, 2, 3, 4, 5}
b = {4, 5, 6, 7, 8}
# Union (gabungan)
print("Union:", a | b)
print("Union:", a.union(b))
# {1, 2, 3, 4, 5, 6, 7, 8}
# Intersection (irisan)
print("Intersection:", a & b)
print("Intersection:", a.intersection(b))
# {4, 5}
# Difference (selisih)
print("Difference a-b:", a - b)
print("Difference a-b:", a.difference(b))
# {1, 2, 3}
print("Difference b-a:", b - a)
# {6, 7, 8}
# Symmetric Difference (XOR)
print("Symmetric Diff:", a ^ b)
print("Symmetric Diff:", a.symmetric_difference(b))
# {1, 2, 3, 6, 7, 8}
# Subset dan Superset
x = {1, 2, 3}
y = {1, 2, 3, 4, 5}
print("x subset of y:", x.issubset(y)) # True
print("y superset of x:", y.issuperset(x)) # True
print("Disjoint:", x.isdisjoint({6, 7})) # TrueKonversi Antar Struktur Data
# List ke Set (hapus duplikat)
numbers = [1, 2, 2, 3, 3, 3]
unique = set(numbers) # {1, 2, 3}
# Set ke List (add order)
unique_list = list(unique) # [1, 2, 3]
# List ke Tuple (make immutable)
tuple_nums = tuple(numbers)
# String ke List
kata = "Python"
huruf_list = list(kata) # ['P', 'y', 't', 'h', 'o', 'n']
# Dict keys/values ke List
person = {"name": "Budi", "age": 20}
keys = list(person.keys())
values = list(person.values())
# Zip lists ke dict
keys = ["a", "b", "c"]
values = [1, 2, 3]
d = dict(zip(keys, values)) # {'a': 1, 'b': 2, 'c': 3}Latihan
- Buat program untuk menghitung rata-rata nilai dari list menggunakan berbagai metode
- Buat dictionary untuk menyimpan data mahasiswa dan implementasikan CRUD operations
- Gunakan set untuk mencari common elements antara dua list
- Buat program untuk menghitung frekuensi kata dalam sebuah teks menggunakan dictionary
- Implementasikan matrix operations menggunakan nested lists
Apa Selanjutnya?
Selanjutnya kita akan belajar tentang Modul Python untuk mengorganisir kode dan menggunakan library!
