Python Dasar

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

Operasi Dasar 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])  # Mangga

List Indexing

  • Index dimulai dari 0 untuk elemen pertama
  • Index negatif menghitung dari belakang: -1 adalah elemen terakhir
  • Mengakses index yang tidak ada akan menyebabkan IndexError

Slicing List

List Slicing
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 list

Memodifikasi List

Mengubah 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))  # 5
angka = [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.

List Comprehension
# 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

List dalam List
# 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

Operasi Dasar 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 ada

KeyError

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

Mengubah 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

Dictionary Methods
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

Looping 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

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

Dictionary dalam Dictionary
# 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.

Tuple Operations
# 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))  # 3

Why 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.

Set Operations
# 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 semua

Set Operations (Matematika)

Set Mathematical Operations
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}))    # True

Konversi Antar Struktur Data

Type Conversion
# 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

  1. Buat program untuk menghitung rata-rata nilai dari list menggunakan berbagai metode
  2. Buat dictionary untuk menyimpan data mahasiswa dan implementasikan CRUD operations
  3. Gunakan set untuk mencari common elements antara dua list
  4. Buat program untuk menghitung frekuensi kata dalam sebuah teks menggunakan dictionary
  5. Implementasikan matrix operations menggunakan nested lists

Apa Selanjutnya?

Selanjutnya kita akan belajar tentang Modul Python untuk mengorganisir kode dan menggunakan library!