
Mengenal Virtual Environment Python
Pernahkah Anda mengalami situasi ini: Anda bekerja pada beberapa proyek Python yang membutuhkan versi package yang berbeda?
Struktur data adalah cara kita mengorganisir dan menyimpan data dalam program. Python memiliki beberapa struktur data bawaan yang sangat berguna dan sering digunakan, yaitu List, Tuple, dan Dictionary. Ketiga struktur data ini memiliki karakteristik, kelebihan, dan penggunaan yang berbeda-beda.
Pada artikel ini, kita akan membahas secara mendalam ketiga struktur data tersebut beserta contoh penggunaannya. Mari kita mulai!
List adalah struktur data yang dapat menyimpan kumpulan item dalam satu variabel. List bersifat:
Cara membuat list di Python sangat sederhana:
# List dengan item sejenis
buah = ["apel", "jeruk", "mangga", "pisang"]
angka = [1, 2, 3, 4, 5]
# List dengan item berbeda tipe
campuran = ["hello", 123, True, 3.14]
# List kosong
kosong = []
# List bersarang (nested list)
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print("List buah:", buah)
print("List angka:", angka)
print("List campuran:", campuran)
print("List kosong:", kosong)
print("Matrix:", matrix)
List buah: ['apel', 'jeruk', 'mangga', 'pisang']
List angka: [1, 2, 3, 4, 5]
List campuran: ['hello', 123, True, 3.14]
List kosong: []
Matrix: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Untuk mengakses elemen list, kita menggunakan indeks. Python menggunakan indeks berbasis nol, artinya indeks pertama adalah 0, kedua adalah 1, dan seterusnya.
buah = ["apel", "jeruk", "mangga", "pisang", "anggur"]
# Mengakses dengan indeks positif (dari depan)
print("Item pertama:", buah[0])
print("Item ketiga:", buah[2])
# Mengakses dengan indeks negatif (dari belakang)
print("Item terakhir:", buah[-1])
print("Item terakhir kedua:", buah[-2])
# Slicing (mengambil beberapa elemen)
print("Dua item pertama:", buah[:2])
print("Dari item kedua sampai keempat:", buah[1:4])
print("Dari item ketiga sampai akhir:", buah[2:])
# Slicing dengan langkah (step)
print("Item dengan indeks genap:", buah[::2])
print("List terbalik:", buah[::-1])
Item pertama: apel
Item ketiga: mangga
Item terakhir: anggur
Item terakhir kedua: pisang
Dua item pertama: ['apel', 'jeruk']
Dari item kedua sampai keempat: ['jeruk', 'mangga', 'pisang']
Dari item ketiga sampai akhir: ['mangga', 'pisang', 'anggur']
Item dengan indeks genap: ['apel', 'mangga', 'anggur']
List terbalik: ['anggur', 'pisang', 'mangga', 'jeruk', 'apel']
Karena list bersifat mutable, kita bisa mengubah, menambah, atau menghapus elemennya.
buah = ["apel", "jeruk", "mangga"]
print("List awal:", buah)
# Mengubah elemen
buah[1] = "strawberry"
print("Setelah mengubah elemen kedua:", buah)
# Menambah elemen
buah.append("pisang")
print("Setelah append:", buah)
buah.insert(1, "nanas")
print("Setelah insert di posisi kedua:", buah)
buah.extend(["kiwi", "anggur"])
print("Setelah extend:", buah)
# Menghapus elemen
buah.remove("apel")
print("Setelah remove 'apel':", buah)
buah_terakhir = buah.pop()
print("Item yang di-pop:", buah_terakhir)
print("Setelah pop:", buah)
del buah[0]
print("Setelah del indeks 0:", buah)
# Mengurutkan list
buah.sort()
print("Setelah sort:", buah)
buah.reverse()
print("Setelah reverse:", buah)
# Membersihkan list
buah.clear()
print("Setelah clear:", buah)
List awal: ['apel', 'jeruk', 'mangga']
Setelah mengubah elemen kedua: ['apel', 'strawberry', 'mangga']
Setelah append: ['apel', 'strawberry', 'mangga', 'pisang']
Setelah insert di posisi kedua: ['apel', 'nanas', 'strawberry', 'mangga', 'pisang']
Setelah extend: ['apel', 'nanas', 'strawberry', 'mangga', 'pisang', 'kiwi', 'anggur']
Setelah remove 'apel': ['nanas', 'strawberry', 'mangga', 'pisang', 'kiwi', 'anggur']
Item yang di-pop: anggur
Setelah pop: ['nanas', 'strawberry', 'mangga', 'pisang', 'kiwi']
Setelah del indeks 0: ['strawberry', 'mangga', 'pisang', 'kiwi']
Setelah sort: ['kiwi', 'mangga', 'pisang', 'strawberry']
Setelah reverse: ['strawberry', 'pisang', 'mangga', 'kiwi']
Setelah clear: []
# Menggabungkan list
list1 = [1, 2, 3]
list2 = [4, 5, 6]
gabungan = list1 + list2
print("Hasil penggabungan:", gabungan)
# Mengulang list
pengulangan = list1 * 3
print("List diulang 3 kali:", pengulangan)
# Mencari elemen dalam list
buah = ["apel", "jeruk", "mangga", "pisang"]
print("Apakah jeruk ada dalam list?", "jeruk" in buah)
print("Apakah anggur ada dalam list?", "anggur" in buah)
# Menghitung jumlah elemen
print("Jumlah elemen dalam list buah:", len(buah))
# Menghitung kemunculan elemen
angka = [1, 2, 3, 2, 2, 4, 5, 2]
print("Angka 2 muncul sebanyak:", angka.count(2), "kali")
# Mencari indeks elemen
print("Indeks pertama angka 2:", angka.index(2))
Hasil penggabungan: [1, 2, 3, 4, 5, 6]
List diulang 3 kali: [1, 2, 3, 1, 2, 3, 1, 2, 3]
Apakah jeruk ada dalam list? True
Apakah anggur ada dalam list? False
Jumlah elemen dalam list buah: 4
Angka 2 muncul sebanyak: 4 kali
Indeks pertama angka 2: 1
List comprehension adalah cara singkat dan elegan untuk membuat list baru dari list yang sudah ada.
# Tanpa list comprehension
kuadrat = []
for i in range(1, 6):
kuadrat.append(i ** 2)
print("Kuadrat tanpa list comprehension:", kuadrat)
# Dengan list comprehension
kuadrat_lc = [i ** 2 for i in range(1, 6)]
print("Kuadrat dengan list comprehension:", kuadrat_lc)
# List comprehension dengan kondisi
bilangan = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
genap = [x for x in bilangan if x % 2 == 0]
print("Bilangan genap:", genap)
# List comprehension lebih kompleks
kata = ["apel", "jeruk", "mangga", "pisang", "anggur"]
hasil = [k.upper() for k in kata if len(k) > 5]
print("Kata dengan lebih dari 5 huruf (kapital):", hasil)
Kuadrat tanpa list comprehension: [1, 4, 9, 16, 25]
Kuadrat dengan list comprehension: [1, 4, 9, 16, 25]
Bilangan genap: [2, 4, 6, 8, 10]
Kata dengan lebih dari 5 huruf (kapital): ['MANGGA', 'PISANG', 'ANGGUR']
List cocok digunakan ketika:
Tuple adalah struktur data yang mirip dengan list, namun dengan perbedaan penting: tuple bersifat immutable (tidak bisa diubah setelah dibuat). Tuple bersifat:
# Tuple dengan item sejenis
buah = ("apel", "jeruk", "mangga", "pisang")
angka = (1, 2, 3, 4, 5)
# Tuple dengan item berbeda tipe
campuran = ("hello", 123, True, 3.14)
# Tuple kosong
kosong = ()
# Tuple dengan satu item (perhatikan koma)
single = ("python",) # Dengan koma
bukan_tuple = ("python") # Tanpa koma, ini string biasa
# Tuple bersarang (nested tuple)
koordinat = ((1, 2), (3, 4), (5, 6))
print("Tuple buah:", buah)
print("Tuple angka:", angka)
print("Tuple campuran:", campuran)
print("Tuple kosong:", kosong)
print("Single tuple:", single, "tipe:", type(single))
print("Bukan tuple:", bukan_tuple, "tipe:", type(bukan_tuple))
print("Koordinat:", koordinat)
Tuple buah: ('apel', 'jeruk', 'mangga', 'pisang')
Tuple angka: (1, 2, 3, 4, 5)
Tuple campuran: ('hello', 123, True, 3.14)
Tuple kosong: ()
Single tuple: ('python',) tipe: <class 'tuple'>
Bukan tuple: python tipe: <class 'str'>
Koordinat: ((1, 2), (3, 4), (5, 6))
Cara mengakses elemen tuple mirip dengan list:
buah = ("apel", "jeruk", "mangga", "pisang", "anggur")
# Mengakses dengan indeks positif
print("Item pertama:", buah[0])
print("Item ketiga:", buah[2])
# Mengakses dengan indeks negatif
print("Item terakhir:", buah[-1])
print("Item terakhir kedua:", buah[-2])
# Slicing
print("Dua item pertama:", buah[:2])
print("Dari item kedua sampai keempat:", buah[1:4])
print("Dari item ketiga sampai akhir:", buah[2:])
# Mencoba mengubah elemen (akan error)
try:
buah[0] = "melon"
except TypeError as e:
print("Error:", e)
Item pertama: apel
Item ketiga: mangga
Item terakhir: anggur
Item terakhir kedua: pisang
Dua item pertama: ('apel', 'jeruk')
Dari item kedua sampai keempat: ('jeruk', 'mangga', 'pisang')
Dari item ketiga sampai akhir: ('mangga', 'pisang', 'anggur')
Error: 'tuple' object does not support item assignment
Meskipun immutable, tuple masih memiliki beberapa operasi yang bisa dilakukan:
# Menggabungkan tuple
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
gabungan = tuple1 + tuple2
print("Hasil penggabungan:", gabungan)
# Mengulang tuple
pengulangan = tuple1 * 3
print("Tuple diulang 3 kali:", pengulangan)
# Mencari elemen dalam tuple
buah = ("apel", "jeruk", "mangga", "pisang")
print("Apakah jeruk ada dalam tuple?", "jeruk" in buah)
print("Apakah anggur ada dalam tuple?", "anggur" in buah)
# Menghitung jumlah elemen
print("Jumlah elemen dalam tuple buah:", len(buah))
# Menghitung kemunculan elemen
angka = (1, 2, 3, 2, 2, 4, 5, 2)
print("Angka 2 muncul sebanyak:", angka.count(2), "kali")
# Mencari indeks elemen
print("Indeks pertama angka 2:", angka.index(2))
Hasil penggabungan: (1, 2, 3, 4, 5, 6)
Tuple diulang 3 kali: (1, 2, 3, 1, 2, 3, 1, 2, 3)
Apakah jeruk ada dalam tuple? True
Apakah anggur ada dalam tuple? False
Jumlah elemen dalam tuple buah: 4
Angka 2 muncul sebanyak: 4 kali
Indeks pertama angka 2: 1
Tuple memungkinkan packing dan unpacking, yang sangat berguna untuk bertukar nilai atau mengembalikan beberapa nilai dari fungsi.
# Tuple packing
koordinat = 3, 4 # Ini adalah tuple (3, 4)
print("Koordinat:", koordinat)
print("Tipe data:", type(koordinat))
# Tuple unpacking
x, y = koordinat
print(f"x = {x}, y = {y}")
# Multiple assignment dengan tuple unpacking
nama, umur, kota = "Budi", 25, "Jakarta"
print(f"Nama: {nama}, Umur: {umur}, Kota: {kota}")
# Swap nilai dengan tuple
a = 5
b = 10
print(f"Sebelum swap: a = {a}, b = {b}")
a, b = b, a # Swap menggunakan tuple
print(f"Setelah swap: a = {a}, b = {b}")
# Unpacking dengan *
buah = ("apel", "jeruk", "mangga", "pisang", "anggur")
pertama, kedua, *sisanya = buah
print(f"Pertama: {pertama}")
print(f"Kedua: {kedua}")
print(f"Sisanya: {sisanya}")
*awal, terakhir = buah
print(f"Awal: {awal}")
print(f"Terakhir: {terakhir}")
Koordinat: (3, 4)
Tipe data: <class 'tuple'>
x = 3, y = 4
Nama: Budi, Umur: 25, Kota: Jakarta
Sebelum swap: a = 5, b = 10
Setelah swap: a = 10, b = 5
Pertama: apel
Kedua: jeruk
Sisanya: ['mangga', 'pisang', 'anggur']
Awal: ['apel', 'jeruk', 'mangga', 'pisang']
Terakhir: anggur
Tuple cocok digunakan ketika:
Dictionary adalah struktur data yang menyimpan data dalam pasangan key-value. Dictionary bersifat:
# Dictionary sederhana
mahasiswa = {
"nama": "Budi",
"umur": 20,
"jurusan": "Teknik Informatika",
"aktif": True
}
# Dictionary dengan berbagai tipe data sebagai key
campuran = {
"string": "nilai string",
123: "nilai dari key integer",
(1, 2): "nilai dari key tuple",
True: "nilai dari key boolean"
}
# Dictionary kosong
kosong = {}
# Dictionary bersarang (nested)
data_mahasiswa = {
"101": {
"nama": "Budi",
"umur": 20,
"nilai": [85, 90, 78]
},
"102": {
"nama": "Ani",
"umur": 19,
"nilai": [90, 85, 88]
}
}
print("Dictionary mahasiswa:", mahasiswa)
print("Dictionary campuran:", campuran)
print("Dictionary kosong:", kosong)
print("Dictionary bersarang:", data_mahasiswa)
Dictionary mahasiswa: {'nama': 'Budi', 'umur': 20, 'jurusan': 'Teknik Informatika', 'aktif': True}
Dictionary campuran: {'string': 'nilai string', 123: 'nilai dari key integer', (1, 2): 'nilai dari key tuple', True: 'nilai dari key boolean'}
Dictionary kosong: {}
Dictionary bersarang: {'101': {'nama': 'Budi', 'umur': 20, 'nilai': [85, 90, 78]}, '102': {'nama': 'Ani', 'umur': 19, 'nilai': [90, 85, 88]}}
mahasiswa = {
"nama": "Budi",
"umur": 20,
"jurusan": "Teknik Informatika",
"nilai": [85, 90, 78]
}
# Mengakses value dengan key
print("Nama:", mahasiswa["nama"])
print("Umur:", mahasiswa["umur"])
print("Nilai pertama:", mahasiswa["nilai"][0])
# Mengakses dengan method get() (lebih aman)
print("Jurusan:", mahasiswa.get("jurusan"))
print("Alamat:", mahasiswa.get("alamat")) # Return None jika key tidak ada
print("Alamat:", mahasiswa.get("alamat", "Tidak diketahui")) # Nilai default
# Mengubah nilai
mahasiswa["umur"] = 21
print("Umur setelah diubah:", mahasiswa["umur"])
# Menambah key-value baru
mahasiswa["alamat"] = "Jakarta"
print("Dictionary setelah menambah alamat:", mahasiswa)
# Menghapus key-value
del mahasiswa["nilai"]
print("Dictionary setelah menghapus nilai:", mahasiswa)
# Menghapus dan mengambil value dengan pop()
jurusan = mahasiswa.pop("jurusan")
print(f"Jurusan yang dihapus: {jurusan}")
print("Dictionary setelah pop jurusan:", mahasiswa)
# Menghapus dan mengambil item terakhir (Python 3.7+)
item = mahasiswa.popitem()
print(f"Item terakhir yang dihapus: {item}")
print("Dictionary setelah popitem:", mahasiswa)
Nama: Budi
Umur: 20
Nilai pertama: 85
Jurusan: Teknik Informatika
Alamat: None
Alamat: Tidak diketahui
Umur setelah diubah: 21
Dictionary setelah menambah alamat: {'nama': 'Budi', 'umur': 21, 'jurusan': 'Teknik Informatika', 'nilai': [85, 90, 78], 'alamat': 'Jakarta'}
Dictionary setelah menghapus nilai: {'nama': 'Budi', 'umur': 21, 'jurusan': 'Teknik Informatika', 'alamat': 'Jakarta'}
Jurusan yang dihapus: Teknik Informatika
Dictionary setelah pop jurusan: {'nama': 'Budi', 'umur': 21, 'alamat': 'Jakarta'}
Item terakhir yang dihapus: ('alamat', 'Jakarta')
Dictionary setelah popitem: {'nama': 'Budi', 'umur': 21}
mahasiswa = {
"nama": "Budi",
"umur": 21,
"jurusan": "Teknik Informatika"
}
# Mendapatkan semua keys
keys = mahasiswa.keys()
print("Semua keys:", keys)
# Mendapatkan semua values
values = mahasiswa.values()
print("Semua values:", values)
# Mendapatkan semua pasangan key-value sebagai tuple
items = mahasiswa.items()
print("Semua items:", items)
# Menggabungkan dictionary
info_tambahan = {
"semester": 4,
"ipk": 3.75
}
mahasiswa.update(info_tambahan)
print("Dictionary setelah update:", mahasiswa)
# Membuat salinan dictionary
mahasiswa_copy = mahasiswa.copy()
print("Salinan dictionary:", mahasiswa_copy)
# Menghapus semua items
mahasiswa.clear()
print("Dictionary setelah clear:", mahasiswa)
# Dictionary comprehension
nilai_ujian = {"Budi": 85, "Ani": 90, "Citra": 78, "Dodi": 65}
lulus = {nama: nilai for nama, nilai in nilai_ujian.items() if nilai >= 70}
print("Siswa yang lulus:", lulus)
Semua keys: dict_keys(['nama', 'umur', 'jurusan'])
Semua values: dict_values(['Budi', 21, 'Teknik Informatika'])
Semua items: dict_items([('nama', 'Budi'), ('umur', 21), ('jurusan', 'Teknik Informatika')])
Dictionary setelah update: {'nama': 'Budi', 'umur': 21, 'jurusan': 'Teknik Informatika', 'semester': 4, 'ipk': 3.75}
Salinan dictionary: {'nama': 'Budi', 'umur': 21, 'jurusan': 'Teknik Informatika', 'semester': 4, 'ipk': 3.75}
Dictionary setelah clear: {}
Siswa yang lulus: {'Budi': 85, 'Ani': 90, 'Citra': 78}
mahasiswa = {
"Budi": {"jurusan": "Informatika", "ipk": 3.7},
"Ani": {"jurusan": "Akuntansi", "ipk": 3.9},
"Citra": {"jurusan": "Manajemen", "ipk": 3.5},
"Dodi": {"jurusan": "Teknik Sipil", "ipk": 3.2}
}
# Iterasi key
print("Nama mahasiswa:")
for nama in mahasiswa:
print("-", nama)
# Iterasi key (alternatif)
print("\nNama mahasiswa (dengan keys()):")
for nama in mahasiswa.keys():
print("-", nama)
# Iterasi value
print("\nData mahasiswa:")
for data in mahasiswa.values():
print("-", data)
# Iterasi key-value
print("\nDetail mahasiswa:")
for nama, data in mahasiswa.items():
print(f"- {nama}: jurusan {data['jurusan']}, IPK {data['ipk']}")
# Iterasi nested dictionary
print("\nDaftar mahasiswa dengan IPK > 3.5:")
for nama, data in mahasiswa.items():
if data["ipk"] > 3.5:
print(f"- {nama} ({data['jurusan']}): {data['ipk']}")
Nama mahasiswa:
- Budi
- Ani
- Citra
- Dodi
Nama mahasiswa (dengan keys()):
- Budi
- Ani
- Citra
- Dodi
Data mahasiswa:
- {'jurusan': 'Informatika', 'ipk': 3.7}
- {'jurusan': 'Akuntansi', 'ipk': 3.9}
- {'jurusan': 'Manajemen', 'ipk': 3.5}
- {'jurusan': 'Teknik Sipil', 'ipk': 3.2}
Detail mahasiswa:
- Budi: jurusan Informatika, IPK 3.7
- Ani: jurusan Akuntansi, IPK 3.9
- Citra: jurusan Manajemen, IPK 3.5
- Dodi: jurusan Teknik Sipil, IPK 3.2
Daftar mahasiswa dengan IPK > 3.5:
- Budi (Informatika): 3.7
- Ani (Akuntansi): 3.9
Dictionary cocok digunakan ketika:
Fitur | List | Tuple | Dictionary |
---|---|---|---|
Sintaks | [item1, item2, ...] |
(item1, item2, ...) |
{key1: value1, key2: value2, ...} |
Mutable | Ya | Tidak | Ya |
Ordered | Ya | Ya | Ya (Python 3.7+) |
Pengindeksan | Berdasarkan posisi (0, 1, 2, …) | Berdasarkan posisi (0, 1, 2, …) | Berdasarkan key |
Duplikat | Diizinkan | Diizinkan | Key harus unik |
Kecepatan | Lebih lambat dari tuple | Lebih cepat dari list | Pencarian sangat cepat (O(1)) |
Use Case | Data berurutan yang perlu diubah | Data berurutan yang tidak berubah | Data dengan asosiasi key-value |
Mari kita lihat beberapa contoh penggunaan nyata dari ketiga struktur data ini:
# Database kontak menggunakan dictionary
kontak = {
"Budi": {
"telepon": "081234567890",
"email": "[email protected]",
"alamat": "Jakarta"
},
"Ani": {
"telepon": "089876543210",
"email": "[email protected]",
"alamat": "Bandung"
}
}
def tampilkan_kontak():
"""Menampilkan semua kontak"""
if not kontak:
print("Tidak ada kontak tersimpan.")
return
print("\n===== DAFTAR KONTAK =====")
for nama, info in kontak.items():
print(f"\nNama: {nama}")
print(f"Telepon: {info['telepon']}")
print(f"Email: {info['email']}")
print(f"Alamat: {info['alamat']}")
print("========================")
def tambah_kontak(nama, telepon, email, alamat):
"""Menambahkan kontak baru"""
if nama in kontak:
print(f"Kontak dengan nama {nama} sudah ada!")
return
kontak[nama] = {
"telepon": telepon,
"email": email,
"alamat": alamat
}
print(f"Kontak {nama} berhasil ditambahkan!")
def hapus_kontak(nama):
"""Menghapus kontak"""
if nama in kontak:
del kontak[nama]
print(f"Kontak {nama} berhasil dihapus!")
else:
print(f"Kontak dengan nama {nama} tidak ditemukan!")
# Demonstrasi program
tampilkan_kontak()
tambah_kontak("Citra", "087654321098", "[email protected]", "Surabaya")
tampilkan_kontak()
hapus_kontak("Budi")
tampilkan_kontak()
===== DAFTAR KONTAK =====
Nama: Budi
Telepon: 081234567890
Email: [email protected]
Alamat: Jakarta
Nama: Ani
Telepon: 089876543210
Email: [email protected]
Alamat: Bandung
========================
Kontak Citra berhasil ditambahkan!
===== DAFTAR KONTAK =====
Nama: Budi
Telepon: 081234567890
Email: [email protected]
Alamat: Jakarta
Nama: Ani
Telepon: 089876543210
Email: [email protected]
Alamat: Bandung
Nama: Citra
Telepon: 087654321098
Email: [email protected]
Alamat: Surabaya
========================
Kontak Budi berhasil dihapus!
===== DAFTAR KONTAK =====
Nama: Ani
Telepon: 089876543210
Email: [email protected]
Alamat: Bandung
Nama: Citra
Telepon: 087654321098
Email: [email protected]
Alamat: Surabaya
========================
# Data penjualan bulanan menggunakan list dan dictionary
penjualan_bulanan = [
{"bulan": "Januari", "produk": [
{"nama": "Laptop", "jumlah": 5, "harga": 12000000},
{"nama": "Smartphone", "jumlah": 10, "harga": 5000000},
{"nama": "Headphone", "jumlah": 15, "harga": 500000}
]},
{"bulan": "Februari", "produk": [
{"nama": "Laptop", "jumlah": 7, "harga": 12000000},
{"nama": "Smartphone", "jumlah": 8, "harga": 5000000},
{"nama": "Headphone", "jumlah": 20, "harga": 500000}
]},
{"bulan": "Maret", "produk": [
{"nama": "Laptop", "jumlah": 9, "harga": 12000000},
{"nama": "Smartphone", "jumlah": 12, "harga": 5000000},
{"nama": "Headphone", "jumlah": 25, "harga": 500000}
]}
]
# Tuple untuk menyimpan kategori produk (immutable)
kategori_produk = (
("Laptop", "Elektronik", "High"),
("Smartphone", "Elektronik", "High"),
("Headphone", "Aksesoris", "Medium")
)
def hitung_total_pendapatan():
"""Menghitung total pendapatan dari semua bulan"""
total = 0
for bulan in penjualan_bulanan:
for produk in bulan["produk"]:
total += produk["jumlah"] * produk["harga"]
return total
def pendapatan_per_bulan():
"""Menghitung pendapatan per bulan"""
hasil = {}
for bulan in penjualan_bulanan:
total_bulan = 0
for produk in bulan["produk"]:
total_bulan += produk["jumlah"] * produk["harga"]
hasil[bulan["bulan"]] = total_bulan
return hasil
def produk_terlaris():
"""Mencari produk yang paling banyak terjual"""
penjualan_produk = {}
for bulan in penjualan_bulanan:
for produk in bulan["produk"]:
nama = produk["nama"]
if nama in penjualan_produk:
penjualan_produk[nama] += produk["jumlah"]
else:
penjualan_produk[nama] = produk["jumlah"]
# Mencari produk dengan penjualan tertinggi
produk_teratas = max(penjualan_produk.items(), key=lambda x: x[1])
return produk_teratas
def info_kategori(nama_produk):
"""Mendapatkan kategori produk dari tuple"""
for produk in kategori_produk:
if produk[0] == nama_produk:
return produk[1], produk[2]
return "Tidak diketahui", "Tidak diketahui"
# Laporan analisis
print("===== LAPORAN ANALISIS PENJUALAN =====")
print(f"Total pendapatan: Rp {hitung_total_pendapatan():,}")
print("\nPendapatan per bulan:")
for bulan, pendapatan in pendapatan_per_bulan().items():
print(f"- {bulan}: Rp {pendapatan:,}")
produk, jumlah = produk_terlaris()
kategori, level = info_kategori(produk)
print(f"\nProduk terlaris: {produk} ({jumlah} unit)")
print(f"Kategori: {kategori}")
print(f"Level: {level}")
print("=====================================")
===== LAPORAN ANALISIS PENJUALAN =====
Total pendapatan: Rp 296,500,000
Pendapatan per bulan:
- Januari: Rp 87,500,000
- Februari: Rp 94,000,000
- Maret: Rp 115,000,000
Produk terlaris: Headphone (60 unit)
Kategori: Aksesoris
Level: Medium
=====================================
sort()
untuk mengurutkan list secara in-place atau sorted()
untuk mendapatkan list baru yang terurut(1,)
bukan (1)
get()
untuk mengakses nilai yang mungkin tidak adaList, tuple, dan dictionary adalah tiga struktur data fundamental dalam Python yang memiliki karakteristik dan kegunaan yang berbeda:
Memahami kapan dan bagaimana menggunakan masing-masing struktur data ini akan sangat membantu dalam membuat program Python yang lebih efisien, mudah dibaca, dan mudah dipelihara. Seleksi struktur data yang tepat adalah langkah penting dalam mendesain algoritma yang efektif.
Dengan menguasai ketiga struktur data ini, Anda telah memiliki fondasi yang kuat untuk membuat berbagai aplikasi di Python, dari yang sederhana hingga yang kompleks.
Pernahkah Anda mengalami situasi ini: Anda bekerja pada beberapa proyek Python yang membutuhkan versi package yang berbeda?
Panduan Instalasi Python di Windows, macOS, dan Linux Python telah menjadi salah satu bahasa pemrograman terpopuler di dunia dengan pertumbuhan yang luar biasa dalam beberapa tahun terakhir.
String adalah salah satu tipe data paling dasar dan sering digunakan dalam pemrograman Python.
Ketika belajar bahasa pemrograman apapun, ada dua konsep fundamental yang perlu Anda kuasai terlebih dahulu: variabel dan tipe data.