Modul 1: Pengenalan dan Review Struktur Data - fzl-22/modul-alstrukdat-sainsdata GitHub Wiki

1. Tentang Struktur Data

1.1 Definisi Struktur Data

Struktur data adalah format yang digunakan untuk menyimpan data-data dalam bentuk tertentu sehingga dapat diakses, diproses, dan disimpan dengan efisien sesuai dengan kebutuhan dan jenis datanya.

Gambar di bawah ini menunjukkan beberapa struktur data secara umum: Data Structure Sumber: www.scaler.com

Pada semester 1, kita telah mempelajari struktur data primitif (atau biasa disebut dengan tipe data). Pada semester ini, kita akan mempelajari struktur data non-primitif (atau biasa disebut dengan struktur data saja). Struktur data ini terbagi menjadi dua, yaitu:

  • struktur data linear: struktur data yang tersusun dalam urutan linear dan tanpa hierarki. Contohnya dalam dunia nyata adalah buku-buku dalam sebuah rak buku, benda-benda dalam antrian, dan kamar-kamar pada sebuah gedung apartemen atau hotel.
  • struktur data non-linear: struktur data yang tidak tersusun dalam urutan linear. Struktur data ini bisa tersusun dalam hierarki ataupun percabangan tertentu. Dalam dunia nyata, contohnya adalah silsilah keluarga dan alamat-alamat bangunan pada Google Map.

1.2 Mengapa Struktur Data penting?

Struktur data perlu kita pelajari karena beberapa alasan berikut:

  1. Struktur data memudahkan programmer untuk menyimpan data-data dengan kriteria tertentu.
  2. Algoritma tertentu membutuhkan struktur data tertentu agar bisa digunakan.
  3. Dan yang perlu diperhatikan, pemilihan struktur data sangat mempengaruhi efisiensi performa kode program, baik dalam hal efisiensi waktu maupun efisiensi memory.

Sehingga, pemilihan algoritma dan struktur data yang tepat untuk menyelesaikan suatu masalah dapat mempengaruhi keoptimalan kode program yang sedang kita buat.

1.3 Struktur Data dalam Python

Data Structure in Python Sumber: www.scaler.com

Secara default, Python menyediakan beberapa struktur data berikut secara built-in:

  • List
  • Dictionary
  • Tuple
  • Set

Namun, kita juga bisa membuat sendiri struktur data (user-defined) lain dengan menggunakan struktur data built-in, seperti:

  • Stack
  • Queue
  • Tree
  • Linked List
  • Graph
  • HashMap

Sebagai contoh, struktur data Graph dapat diimplementasikan menggunakan List maupun Array (Array tidak disediakan secara built-in, namun kalian wajib mempelajarinya lebih detail di sini)

2. List

List merupakan salah satu jenis tipe data yang dimiliki oleh python. Berbeda dengan jenis tipe data lainnya, list memungkinkan variabel untuk dapat menampung lebih dari satu data di dalamnya. Selain dapat menampung lebih dari satu data, data-data yang dapat disimpan di dalam variabel list tersebut dapat terdiri dari berbagai jenis tipe data.

Data dalam list dapat digambarkan seperti di atas. Angka dalam kotak adalah elemen-elemen (atau data) yang disimpan oleh list. Untuk mengakses elemen tertentu dalam list, maka setiap elemen memiliki alamat yang disebut dengan index yang dimulai dari 0 (dalam positive index). Misalnya, jika kita ingin mengakses index 3, maka kita akan mendapatkan nilai 10. Apabila terdapat $N$ elemen dalam list, maka index akan dimulai dari 0 hingga $N-1$.

2.1 Deklarasi List

Untuk mendeklarasikan atau membuat sebuah list dapat dilakukan dengan cara berikut :

NamaList1 = [] # List Kosong
NamaList = [data1,data2,data3]

Dapat dilihat di dalam penulisan di atas untuk membuat sebuah list maka dapat dituliskan seperti penulisan variabel biasa tetapi yang membedakan adalah value pada assigment operation diawali dengan tanda [ dan ditutup dengan tanda ]. Kemudian, di antara tanda [] dapat dituliskan data-data yang ingin disimpan di dalam variabel list tersebut.

Berikut contoh kode program deklarasi List :

IniList = [1,"satu",1.5,"satu koma lima",2]
print(IniList)

Output :

[1, 'satu', 1.5, 'satu koma lima', 2]

Selain mendeklarasikan nilai list dengan cara biasa seperti di atas, ada beberapa metode lain yang dapat digunakan untuk melakukan pemberian data yang ditampung di dalam list. Contoh dari metode tersebut dapat dilihat di kode program di bawah ini :

# Menggunakan Constructor
IniList2 = list((1, 2, 3, 4, 5, 'a', 'b', 'c', 'd'))
print(IniList2)
# menggunakan looping
IniList = [i for i in range(0, 10)]
print(IniList)
IniList = [i for i in "apakabar kalian semua"]
print(IniList)
# ditambahkan if 
IniList = [i for i in range(0, 10) if i % 2 == 0]
print(IniList)

Output :

[1, 2, 3, 4, 5, 'a', 'b', 'c', 'd']
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
['a', 'p', 'a', 'k', 'a', 'b', 'a', 'r', ' ', 'k', 'a', 'l', 'i', 'a', 'n', ' ', 's', 'e', 'm', 'u', 'a']
[0, 2, 4, 6, 8]

2.2 Mengakses Data List

List memiliki sifat seperti string yaitu setiap element atau data di dalam list tersebut memiliki identitas berupa index yang dimulai dari 0. Sehingga dengan menggunakan index kita dapat melakukan pengaksesan data list berdasarkan indexnya seperti contoh di bawah ini :

IniList = [1,"satu",1.5,"satu koma lima",2]
print(IniList[0])
print(IniList[2])
print(IniList[3])

Output :

1
1.5
satu koma lima

Selain hanya mengakses satu demi satu, kita juga bisa mengakses beberapa elemen sekaligus dengan menggunakan list slicing. List slicing adalah fitur dalam Python yg sering digunakan untuk menampilkan data dari list dalam range tertentu. Formatnya adalah sebagai berikut:

arr = [1, 7, 8, 9, 10, 99]

print(arr[<start>:<stop>:<step>]) # akses list mulai dari <start> hingga <stop>, dengan loncatan <step>

# start memiliki nilai default 0
# stop memiliki nilai default index terakhir list
# step memiliki nilai default 1

Dengan format di atas, kita bisa mengakses list seperti di bawah ini:

arrInt = [0, 1, 2, 3, 4, 5, 6, 7, 8, 10]

print(arrInt[::]) # mengakses setiap elemen dalam list
print(arrInt[1:5]) # mengakses setiap elemen dari index 1 hingga index 5
print(arrInt[2:9:3]) # mengakses mulai dari index 2 hingga index 9 dengan lompatan 3 index

List juga dapat diakses dengan menggunakan looping melalui setiap elemennya ataupun indeksnya:

IniList = ['a', 'b', 'c', 'd', '1', '2', '3']

for i in IniList: # berdasarkan elemen list
    print(i)

for i in range(len(IniList)): # berdasarkan index
    print(IniList[i])

Output :

a
b
c
d
1
2
3

Selain dapat menampung data dengan tipe data di atas list juga dapat menampung list lain. Contoh dari penerapannya dapat dilihat pada kode program berikut :

IniList = [[1, 2], ['a', 'b'], [3, [4, 5]]]
print(IniList[0][0])
print(IniList[1][0])
print(IniList[2][0])
print(IniList[2][1][1])

Output :

1
a
3
5

Dapat dilihat pada kode program di atas untuk melakukan pengaksesan data list di dalam list maka diperlukan index tambahan. Dalam hal ini list tersebut baisa disebut list 2,3,hingga n dimensi.

2.3 Fungsi dan Method dalam List

List memiliki banyak fungsi atau method yang dapat digunakan untuk melakukan manipulasi terhadap data di dalam list. Berikut merupakan beberapa fungsi yang dimiliki oleh list

Fungsi Penulisan Deskripsi
append NamaList.append(nilai) Menambahkan data nilai pada list
len len(NamaList) Mencari panjang atau banyak data yang dimiliki list
sum sum(NamaList) Menghitung jumlah dari semua elemen dalam list
min min(NamaList) Mengembalikan nilai terkecil dalam list
max max(NamaList) Mengembalikan nilai terbesar dalam list
insert NamaList.insert(index,nilai) Menambahkan nilai di index yang dipilih
remove NamaList.remove(nilai) Menghapus nilai tertentu di dalam list
pop NamaList.pop() Mengapus data terakhir di list
extend NamaList.extend(listLain) Menambahkan sebuah list ke dalam list
clear NamaList.clear() Menghapus seluruh data di dalam list
index NamaList.index(value) Mereturnkan index list dari value
count NamaList.count(value) Menghitung jumlah munculnya value yang dicari di dalam list
sort NamaList.sort() Mengurutkan nilai list secara ascending
reverse NamaList.reverse() Membalik urutan dari list

Selain fungsi di atas terdapat beberapa fungsi list lain yang mengkombinasikan antara list dan string seperti contoh di bawah ini :

IniList = ['a', 'b', 'c', 'd', '1', '2', '3']
IniList = "-".join(IniList) # menggabungkan list dan membuatnya menjadi string
print(IniList)
IniList = IniList.split('-') # memisahkan string dan menjadikannya list
print(IniList)

Output :

a-b-c-d-1-2-3
['a', 'b', 'c', 'd', '1', '2', '3']

3. Array

Selain list, Python juga memiliki struktur data serupa yaitu array. Struktur data ini dapat diakses dengan cara melakukan import modul NumPy:

import numpy as np # import modul numpy dengan alias sebagai np

Apabila modul NumPy tidak ada, install terlebih dahulu di Anaconda Prompt atau terminal dengan mengetikkan:

conda install numpy

Walaupun serupa, tentu saja terdapat perbedaan antara Array dan List, yaitu

  1. array bersifat homogen (hanya dapat menyimpan elemen-elemen dengan tipe data yang sama). Sedangkan, list bersifat heterogen (dapat menyimpan elemen-elemen dengan tipe data yang berbeda).
  2. Banyak elemen dalam array bersifat statis (tetap). Sedangkan, banyak elemen dalam list bersifat dinamis (dapat diubah-ubah).
  3. array jauh lebih cepat dan hemat memory daripada list. Hal ini dikarenakan modul numpy dibangun di atas bahasa C yangmana jauh lebih cepat daripada Python (nanti kita akan buktikan). Alasan lainnya adalah karena elemen-elemen array tersimpan dalam memory yang terletak bersebelahan dan bertipe data sama, sehingga lebih cepat dan mudah diakses.
  4. array memiliki banyak sekali method/fungsi untuk komputasi numerik. Sedangkan, list tidak punya. Sebagai informasi, NumPy memiliki kepanjangan 'Numerical Python', yangmana memang secara khusus digunakan untuk memfasilitasi komputasi-komputasi numerik.

3.1 Deklarasi Array

Karena bersifat statis dan homogen, maka ukuran dan tipe data dari sebuah array harus ditentukan sejak awal dan tidak bisa diubah-ubah lagi. Berikut adalah beberapa cara yang umum untuk mendeklarasikan sebauh array.

2.1.1 numpy.array

Deklarasi menggunakan numpy.array sering digunakan untuk mendeklarasikan array dan sekaligus menginisialisasi nilainya secara manual.

arr = np.array(<iterable>, <datatype>)

Parameter pertama, yaitu iterable artinya adalah data apapun yang bisa diiterasikan, contohnya list dan tuple yang akan menjadi data-data yang disimpan di dalam array. Sedangkan, parameter keduanya adalah tipe data dari semua elemen yang disimpan tersebut. Apabila tipe data tidak disebutkan, maka secara default akan menjadi int.

arrFloat = np.array([10, 3, 7, 8, 90]) # secara default menjadi int
arrInt = np.array([1, 4, 3, 20, 11], float) # array dengan tipe data integer
arrStr = np.array(['Cristiano', 'Mbappe', 'Modric', 'Griezmann'])
arr2D = np.array([[1, 2, 3],
		  [4, 5, 6],
		  [7, 8, 9]])
arr3D = np.array([[[1, 2, 3],
		   [4, 5, 6],
		   [7, 8, 9]],
		  [[10, 11, 12],
	           [13, 14, 15],
	           [16, 17, 18]]], float)

print(arrFloat)
print(arrInt)
print(arrStr)
print(arr2D)
print(arr3D)

Apabila ingin membuat array multidimensi secara manual, maka penulisan tanda kurung siku '[' dan ']' perlu diperhatikan. Perhatikan konsep berikut:

  • Array 1 dimensi terdiri dari beberapa elemen data.
  • Array 2 dimensi terdiri dari beberapa array 1 dimensi.
  • Array 3 dimensi terdiri dari beberapa array 2 dimensi.
  • Array N dimensi terdiri dari beberapa array N - 1 dimensi.

Selain mendeklarasikan secara langsung, array juga bisa dideklarasikan dengan menggunakan data yang ada pada list atau tuple. Contoh:

listExample = [1, 2, 3, 4]
tupleExample = (5, 6, 7, 8)

arr1 = [-5, 13, 113, 56]
arr2 = [11, 56, 45, 39]
arr3 = [9, 81, 22, 93]
arrAll = [arr1, arr2, arr3]

arrayList = np.array(listExample)
arrayTuple = np.array(tupleExample)
array2D = np.array(arrAll)

2.1.2 numpy.arange dan numpy.linspace

Terkadang, ternyata kita membutuhkan ingin menginisiasi nilai array yang memiliki 'pola' dan otomatis dijalankan. Di sinilah np.arange dan np.linspace beraksi.

> np.arange Method np.arange digunakan untuk mendeklarasikan dan menginisialisasi nilai array dengan nilai yang memiliki jarak yang sama dalam interval tertentu. Berikut adalah format penulisannya:

arrArange = np.arange(<start>, <stop>, <step>, <dtype>)

# start memiliki nilai default 0
# stop wajib dituliskan
# step memiliki nilai default 1
# dtype memiliki nilai default int

Sebagai contoh,

arrArange1 = np.arange(10)
arrArange2 = np.arange(2, 9)
arrArange3 = np.arange(2, 12, 3)
arrArange4 = np.arange(1, 10, 2, float)

print(arrArange1)
print(arrArange2)
print(arrArange3)
print(arrArange4)

Output :

[0 1 2 3 4 5 6 7 8 9]
[2 3 4 5 6 7 8]
[ 2  5  8 11]
[1. 3. 5. 7. 9.]

> np.linspace Method ini mirip dengan np.arange, namun perbedaannya ada di parameter step-nya. Apabila step pada np.arange dideklarasikan secara manual, maka step pada np.linspace dibuat secara otomatis berdasarkan 'banyak data yang diinginkan' dari start hingga stop. Semakin banyak data yang diinginkan, maka semakin kecil pula stepnya dan sebaliknya. Perhatikan format berikut:

arrLins = np.linspace(<start>, <stop>, <num>, <retstep>, <dtype>)

# start wajib dituliskan
# stop wajib dituliskan
# num memiliki nilai default 50
# retstep memiliki nilai default False
# dtype memiliki nilai default float

Seringkali parameter yang digunakan hanyalah 3 parameter pertama (start, stop, dan num). Sebagai contoh, np.linspace(0, 5, 5) akan menginisialisasikan sebanyak 5 data yang berjarak sama dari 0 hingga 5 (yaitu 0.0, 1.25, 2.5, 3.75, 5.0). Parameter retstep (apabila True) akan me-return-kan tidak hanya array-nya, namun juga step dari nilai-nilai dalam array tersebut, yaitu 0.0, 1.25, 2.5, 3.75, 5.0 dan 1.25 sebagai step-nya. Contoh outputnya adalah sebagai berikut:

arrLins1 = np.linspace(2, 3)
arrLins2 = np.linspace(2, 3, 5)
arrLins3 = np.linspace(2, 3, 5, dtype=int)
arrLins4 = np.linspace(2, 3, 5, retstep=True)

print(arrLins1) # akan ada sebanyak 50 data berjarak sama dari 2 sampai 3
print(arrLins2) # Output: [2.   2.25 2.5  2.75 3.  ]
print(arrLins3) # Output: [2 2 2 2 3]
print(arrLins4) # Output: (array([2.  , 2.25, 2.5 , 2.75, 3.  ]), 0.25)

2.1.3 numpy.zeros dan numpy.ones

Seringkali, kita tidak ingin menginisialisasikan nilai-nilai pada suatu array namun masih tetap ingin mendeklarasikannya terlebih dahulu dengan inisialisasi nilai default (biasanya 0 atau 1). Untuk itu, np.zeros dan np.ones sering digunakan. Method np.zeros akan menginisialisasikan nilai 0 pada kesuluruhan elemen array dengan ukuran tertentu, sedangkan np.ones akan menginisialisasikan nilai 1 dengan cara yang sama. Berikut adalah format syntaxnya:

arrZero = np.zeros(<shape>, <dtype>)

# shape wajib dituliskan
# dtype memiliki nilai default float

Parameter shape mewakili ukuran array yang dibuat, misalnya np.zeros(9) akan membuat array zeros berukuran 9. Sedangkan, np.zeros((3, 4)) akan membuat array multidimensi dengan ukuran 3 $\times$ 4, dan seterusnya (array multidimensi akan dibahas pada pertemuan selanjutnya). Berikut adalah contohnya:

arrZero1 = np.zeros(5)
arrZero2 = np.zeros(5, dtype=int)
arrZero3 = np.zeros((3, 4))
arrZero4 = np.zeros((3, 4, 5), dtype=int)

print(arrZero1) # Output: [0. 0. 0. 0. 0.]
print(arrZero2) # Output: [0 0 0 0 0]
print(arrZero3)
# Output:
# [[0. 0. 0. 0.]
#  [0. 0. 0. 0.]
#  [0. 0. 0. 0.]]

print(arrZero4)
# Output:
# [[[0 0 0 0 0]
#   [0 0 0 0 0]
#   [0 0 0 0 0]
#   [0 0 0 0 0]]
# 
#  [[0 0 0 0 0]
#   [0 0 0 0 0]
#   [0 0 0 0 0]
#   [0 0 0 0 0]]
#
#  [[0 0 0 0 0]
#   [0 0 0 0 0]
#   [0 0 0 0 0]
#   [0 0 0 0 0]]]

Method np.ones juga digunakan dengan cara yang sama, hanya berbeda nama method dan nilai yang diinisialisasikan ke dalam array (yaitu 1).

2.1.4 numpy.empty

Kedua method di atas tidaklah kosong mengingat setiap elemen dalam array memiliki nilai 0 atau 1. Apabila kita ingin mendeklarasikan array yang 'kosong' (walaupun tidaklah kosong secara literal), maka gunakan np.empty yangmana memiliki format berikut:

arrEmpty = np.empty(<shape>, <dtype>)

# shape wajib dituliskan
# dtype memiliki nilai default float

Contoh:

arrEmpty1 = np.empty(5, int)
arrEmpty2 = np.empty((3, 4))

print(arrEmpty1) # Apakah arraynya memiliki isi?
print(arrEmpty2) # Apakah arraynya memiliki isi?

for i in range(len(arrEmpty1)):
	arrEmpty1[i] = int(input()) 

for i in range(len(arrEmpty2)):
	for j in range(len(arrEmpty2[i])):
		arrEmpty2[i][j] = float(input())

Hal yang menarik adalah bahwa walaupun namanya np.empty, tetapi arraynya tidaklah kosong, seperti pada output di laptop saya (output di laptop kalian kemungkinan besar berbeda).

Maksud dari empty bukanlah array yang benar-benar kosong tanpa nilai, karena isinya akan otomatis terisi dengan data sampah di memory. empty yang dimaksud adalah 'kosong' dari nilai hasil inisialisasi dari user. Cara deklarasi menggunakan np.empty adalah 'good practice' karena lebih cepat dari np.zeros dan np.ones.

3.2 Method dan Fungsi pada NumPy

Keunggulan dari NumPy adalah memiliki banyak atribut dan method sendiri (bukan Built-In Python) yang lebih cepat komputasinya dan siap digunakan. Berikut adalah beberapa contoh yang umum digunakan:

arr1 = np.array([10, 21, 19, 23, 46, 80, -1, 0, 13])
arr2 = np.array([1, 30, 8, 7, 9, 12, 77, -92, 11])

# Atribut
arr1.ndim # Untuk mengetahui N dimensi dari array
arr1.shape # Untuk mengetahui ukuran array
arr1.size # Untuk mengetahui banyaknya data dalam array
arr1.dtype # Untuk mengetahui tipe data elemen array

# Method
arr1.min() # Mencari nilai minimum dari elemen-elemen pada array
arr1.max() # Mencari nilai maximum dari alemen-elemen pada array
arr1.mean() # Mencari rata-rata dari elemen-elemen pada array
arr1.std() # Mencari standar deviasi dari elemen-elemen pada array
arr1.var() # Mencari varian dari elemen-elemen pada array

# Fungsi (secara element-wise)
result = np.add(arr1, arr2) # array baru dari hasil penjumlahan setiap elemen yang berkorespondensi dari beberapa array
result = np.substract(arr1, arr2) # array baru dari hasil pegurangan setiap elemen yang berkorespondensi dari beberapa array
result = np.multiply(arr1, arr2) # array baru dari hasil perkalian setiap elemen yang berkorespondensi dari beberapa array
result = np.divide(arr1, arr2) # array baru dari hasil pembagian setiap elemen yang berkorespondensi dari beberapa array
result = np.mod(arr1, arr2) # array baru dari hasil modulo setiap elemen yang berkorespondensi dari beberapa array

Note: Fungsi-fungsi di atas juga berlaku untuk array multidimensi.

3.3 Cara Mengakses Elemen pada Array

Data pada array dapat diakses dengan cara yang sama sebagaimana halnya list.

4. SET

Set adalah salah satu struktur data dalam Python yang digunakan untuk menyimpan kumpulan nilai atau elemen, dengan sifat-sifat unik dan tidak berurutan (unordered). Set hanya dapat menyimpan nilai atau elemen yang unik, artinya tidak ada nilai duplikat dalam sebuah set. Set dalam Python mirip dengan himpunan matematika, dimana set terdiri dari elemen-elemen yang tidak terurut dan tidak memiliki indeks.

Keuntungan menggunakan set adalah karena sifatnya yang hanya menyimpan nilai unik, maka set dapat digunakan untuk melakukan operasi matematika seperti gabungan (union), irisan (intersection), dan perbedaan (difference) antara dua set. Selain itu, set juga dapat digunakan untuk memeriksa keanggotaan suatu elemen dalam sebuah set dengan cepat.

4.1 Deklarasi Set

Set pada Python dideklarasikan dengan menggunakan kurung kurawal "{}" dan elemennya dipisahkan dengan tanda koma. Contoh deklarasi set:

my_set = {1, 2, 3, 4, 5}
print(my_set)

Output :

{1, 2, 3, 4, 5}

4.2 Cara mengakses Set

Set pada Python tidak terurut, sehingga tidak dapat diakses menggunakan indeks seperti pada list atau tuple. Namun, elemen-elemen pada set dapat diakses menggunakan loop for.

Contoh:

my_set = {1, 2, 3, 4, 5}

# Menggunakan loop for untuk mengakses elemen pada set
for element in my_set:
    print(element)

Output :

1
2
3
4
5

4.3 Method dan Fungsi pada Set

Berikut adalah beberapa method dan fungsi yang sering digunakan dalam set:

Fungsi Deskripsi
add() Menambahkan elemen baru ke dalam set
clear() Menghapus semua elemen dalam set
copy() Membuat salinan dari set
difference() Mengembalikan set yang berisi elemen yang terdapat di set pertama tetapi tidak di set kedua
discard() Menghapus elemen tertentu dari set
intersection() Mengembalikan set yang berisi elemen yang terdapat di kedua set
isdisjoint() Memeriksa apakah dua set tidak memiliki elemen yang sama
issubset() Memeriksa apakah set pertama merupakan subset dari set kedua
issuperset() Memeriksa apakah set pertama merupakan superset dari set kedua
pop() Menghapus dan mengembalikan elemen acak dari set
remove() Menghapus elemen tertentu dari set
symmetric_difference() Mengembalikan set yang berisi elemen yang hanya terdapat di salah satu set
union() Mengembalikan set yang berisi semua elemen dari kedua set
my_set = {1, 2, 3, 4, 5}
my_set.add(6)
print(my_set)

my_set.update([6, 7, 8])
print(my_set)

my_set.remove(3)
print(my_set)

my_set1 = {1, 2, 3}
my_set2 = {3, 4, 5}
my_set3 = my_set1.union(my_set2)
print(my_set3)

Output :

{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5, 6, 7, 8}
{1, 2, 4, 5}
{1, 2, 3, 4, 5}

5. Tuple

Tuple adalah salah satu jenis urutan data (sequence) pada Python yang digunakan untuk menyimpan kumpulan nilai yang bersifat immutable (tidak bisa diubah setelah dibuat). Setiap nilai atau elemen pada tuple diidentifikasi dengan sebuah indeks yang dimulai dari 0.

Data Structures Tuples Beberapa kelebihan dari tuple adalah:

  1. Lebih efisien dalam penggunaan memori daripada list karena bersifat immutable (tidak bisa diubah setelah dibuat).
  2. Dapat digunakan sebagai key pada dictionary karena bersifat immutable.
  3. Lebih cepat dalam pengaksesannya daripada list karena tersimpan secara berurutan di memori.

5.1 Deklarasi Tuple

Tuple adalah urutan data (sequence) pada Python yang mirip dengan list, namun tidak bisa diubah setelah dibuat. Tuple dideklarasikan dengan menggunakan tanda kurung () dan elemen-elemennya dipisahkan dengan tanda koma.

Contoh deklarasi tuple:

# Mendeklarasikan sebuah tuple kosong
my_tuple = ()

# Mendeklarasikan sebuah tuple dengan beberapa elemen
my_tuple = (1, 2, 3, 4, 5)

# Mendeklarasikan sebuah tuple dengan tipe data yang berbeda
my_tuple = ("apple", 1, True, 3.14)

Output

()
(1, 2, 3, 4, 5)
('apple', 1, True, 3.14)

5.2 Cara Mengakses Tuple

Kita dapat mengakses elemen pada tuple dengan menggunakan indeks yang dimulai dari 0. Contohnya sebagai berikut:

# Mendeklarasikan sebuah tuple
my_tuple = ("apple", "banana", "orange", "grape")

# Mengakses elemen pertama pada tuple
print(my_tuple[0])

# Mengakses elemen kedua pada tuple
print(my_tuple[1])  

# Mengakses elemen terakhir pada tuple
print(my_tuple[-1]) 

Output :

apple
banana
banana

Kita juga dapat menggunakan slicing untuk mengambil sebagian elemen dari tuple:

# Mendeklarasikan sebuah tuple
my_tuple = (1, 2, 3, 4, 5)

print(my_tuple[1:4])
print(my_tuple[-1:-3])

Output :

(2, 3, 4)
(3, 4)

Namun perlu diingat bahwa karena tuple bersifat immutable, maka kita tidak bisa mengubah nilai dari sebuah elemen pada tuple. Sebagai contoh:

# Mendeklarasikan sebuah tuple
my_tuple = (1, 2, 3)

# Mengubah elemen kedua pada tuple (akan menghasilkan TypeError)
my_tuple[1] = 4

Output :

TypeError: 'tuple' object does not support item assignment

5.3 Method dan Fungsi pada Tuple

Sama seperti list, tuple juga memiliki fungsi dan method yang bisa kita gunakan seperti berikut:

Fungsi Penulisan Deskripsi
len len(NamaTuple) Menghitung jumlah item pada tuple
max max(NamaTuple) Mencari nilai paling besar dari sebuah tuple
min min(NamaTuple) Mencari nilai paling kecil dari sebuah tuple
count count(NamaTuple) Mengembalikan jumlah kemunculan sebuah elemen pada tuple
index index(NamaTuple) Mengembalikan indeks dari sebuah elemen pada tuple
sorted sorted(NamaTuple) Mengembalikan tuple yang elemennya diurutkan secara ascending

Method

my_tuple = (1, 2, 2, 3, 4, 4, 4, 5)
print(my_tuple.count(4))

my_tuple = ("apple", "banana", "orange", "grape")
print(my_tuple.index("banana"))

Output

3
1

Fungsi

my_tuple = (5, 2, 8, 1, 3)
sorted_tuple = sorted(my_tuple)
print(sorted_tuple)

len_tuple = len(my_tuple)
print(len_tuple)

max_value = max(my_tuple)
print(max_value)

min_value = min(my_tuple)
print(min_value)

Output

[1, 2, 3, 5, 8]
4
8
1

6. Dictionary

Dictionary adalah salah satu jenis tipe data pada Python yang digunakan untuk menyimpan pasangan key-value. Dalam dictionary, setiap elemen memiliki key yang unik dan tidak boleh duplikat. Key pada dictionary bersifat immutable, artinya tidak dapat diubah setelah dideklarasikan. Sedangkan value pada dictionary bisa berupa tipe data apa saja, bahkan bisa berupa dictionary lagi.

Data Structures Dictionarys

Dictionary sangat berguna untuk menyimpan data yang membutuhkan akses dengan cepat, karena data pada dictionary diakses dengan menggunakan key yang unik. Selain itu, dictionary juga bisa digunakan untuk memodelkan data yang kompleks dengan lebih mudah.

6.1 Deklarasi Dictionary

Untuk mendeklarasikan sebuah dictionary pada Python, kita bisa menggunakan kurung kurawal {} dan memasukkan pasangan key-value yang dipisahkan oleh tanda :. Contoh deklarasi dictionary adalah sebagai berikut:

# Mendeklarasikan sebuah dictionary kosong
my_dict = {}

# Mendeklarasikan sebuah dictionary dengan beberapa pasangan key-value
person = {"name": "John", "age": 30, "city": "New York"}
print(person)

Output :

{'name': 'John', 'age': 30, 'city': 'New York'}

Kita juga dapat menggunakan fungsi dict() untuk mendeklarasikan sebuah dictionary. Fungsi dict() dapat menerima berbagai jenis argumen, seperti list, tuple, atau bahkan dictionary lain. Contoh deklarasi dictionary menggunakan fungsi dict() adalah sebagai berikut:

# Mendeklarasikan sebuah dictionary kosong menggunakan fungsi dict()
my_dict = dict()

# Mendeklarasikan sebuah dictionary dengan beberapa pasangan key-value menggunakan fungsi dict()
person = dict(name="John", age=30, city="New York")
print(person)
# Mendeklarasikan sebuah dictionary dari sebuah list
fruits = dict([("apple", 2), ("banana", 3), ("orange", 5)])
print(fruits)

Output :

{}
{'name': 'John', 'age': 30, 'city': 'New York'}
{'apple': 2, 'banana': 3, 'orange': 5}

6.2 Cara Mengakses Dictionary

Untuk mengakses nilai pada sebuah dictionary, kita dapat menggunakan key yang dimiliki oleh nilai tersebut. Contohnya adalah sebagai berikut:

# Mendeklarasikan sebuah dictionary
person = {"name": "John", "age": 30, "city": "New York"}

# Mengakses nilai pada dictionary dengan key "name"
print(person["name"])

# Mengakses nilai pada dictionary dengan key "age"
print(person["age"])

Output :

Output: John
Output: 30

Kita juga dapat menggunakan method get() untuk mengakses nilai pada dictionary. Method get() akan mengembalikan nilai None jika key yang dicari tidak ada pada dictionary.

# Mendeklarasikan sebuah dictionary
person = {"name": "John", "age": 30, "city": "New York"}

# Mengakses nilai pada dictionary dengan method get()
print(person.get("name"))  

# Mengakses nilai pada dictionary dengan method get() dan key yang tidak ada pada dictionary
print(person.get("gender"))  

Output :

Output: John
Output: None

6.3 Method dan Fungsi pada Dictionary

Berikut adalah beberapa method dan fungsi yang sering digunakan pada dictionary beserta penjelasannya dan contoh penggunaannya:

Method

  1. clear(): Method clear() digunakan untuk menghapus semua pasangan key-value pada sebuah dictionary.
# Mendeklarasikan sebuah dictionary
person = {"name": "John", "age": 30, "city": "New York"}
# Menghapus semua pasangan key-value pada dictionary
person.clear()
print(person) 

Output

{}
  1. get(): Method get() digunakan untuk mengembalikan nilai pada sebuah dictionary dengan key yang ditentukan. Jika key tidak ada pada dictionary, maka method get() akan mengembalikan nilai None atau nilai yang ditentukan pada argumen kedua.
# Mendeklarasikan sebuah dictionary
person = {"name": "John", "age": 30, "city": "New York"}
# Mengembalikan nilai pada dictionary dengan key "name"
print(person.get("name"))  
# Mengembalikan nilai pada dictionary dengan key "gender" dan nilai default "unknown"
print(person.get("gender", "unknown"))  

Output

John
unknown
  1. items(): Method items() digunakan untuk mengembalikan daftar pasangan key-value dalam bentuk tuple.
# Mendeklarasikan sebuah dictionary
person = {"name": "John", "age": 30, "city": "New York"}
# Mengembalikan daftar pasangan key-value dalam bentuk tuple
print(person.items())  

Output

dict_items([('name', 'John'), ('age', 30), ('city', 'New York')])
  1. keys(): Method keys() digunakan untuk mengembalikan daftar key pada sebuah dictionary.
# Mendeklarasikan sebuah dictionary
person = {"name": "John", "age": 30, "city": "New York"}
# Mengembalikan daftar key pada dictionary
print(person.keys()) 

Output

dict_keys(['name', 'age', 'city'])
  1. pop(): Method pop() digunakan untuk menghapus dan mengembalikan nilai pada sebuah dictionary dengan key yang ditentukan.
# Mendeklarasikan sebuah dictionary
person = {"name": "John", "age": 30, "city": "New York"}
# Menghapus dan mengembalikan nilai pada dictionary dengan key "age"
print(person.pop("age"))  
print(person)  

Output

30
{'name': 'John', 'city': 'New York'}
  1. values(): Method values() digunakan untuk mengembalikan daftar nilai pada sebuah dictionary.
# Mendeklarasikan sebuah dictionary
person = {"name": "John", "age": 30, "city": "New York"}
# Mengembalikan daftar nilai pada dictionary
print(person.values())  

Output

dict_values(['John', 30, 'New York'])

Fungsi

  1. all(): Fungsi all() digunakan untuk memeriksa apakah semua nilai pada dictionary adalah True. Fungsi ini akan mengembalikan nilai True jika semua nilai pada dictionary adalah True, jika tidak maka akan mengembalikan nilai False.
# Mendeklarasikan sebuah dictionary
person = {"name": "John", "age": 30, "city": "New York"}

# Memeriksa apakah semua nilai pada dictionary adalah True
print(all(person.values()))  
# Mengubah nilai pada dictionary menjadi False
person["age"] = False
# Memeriksa apakah semua nilai pada dictionary adalah True
print(all(person.values()))  

Output

True
False
  1. any(): Fungsi any() digunakan untuk memeriksa apakah setidaknya ada satu nilai pada dictionary yang bernilai True. Fungsi ini akan mengembalikan nilai True jika setidaknya ada satu nilai pada dictionary yang bernilai True, jika tidak maka akan mengembalikan nilai False.
# Mendeklarasikan sebuah dictionary
person = {"name": "John", "age": 30, "city": "New York"}

# Memeriksa apakah setidaknya ada satu nilai pada dictionary yang bernilai True
print(any(person.values()))  
# Mengubah semua nilai pada dictionary menjadi False
person.update((key, False) for key in person)
# Memeriksa apakah setidaknya ada satu nilai pada dictionary yang bernilai True
print(any(person.values()))  

Output

True
False
  1. sorted(): Fungsi sorted() digunakan untuk mengurutkan pasangan key-value pada dictionary berdasarkan nilai dari key. Fungsi ini akan mengembalikan list yang berisi pasangan key-value yang telah diurutkan.
# Mendeklarasikan sebuah dictionary
person = {"name": "John", "age": 30, "city": "New York"}
# Mengurutkan pasangan key-value pada dictionary berdasarkan nilai dari key
sorted_person = sorted(person.items())
print(sorted_person)  

Output

[('age', 30), ('city', 'New York'), ('name', 'John')]
  1. sum(): Fungsi sum() digunakan untuk menjumlahkan semua nilai pada dictionary.
# Mendeklarasikan sebuah dictionary
person = {"name": "John", "age": 30, "city": "New York"}
# Menjumlahkan semua nilai pada dictionary
print(sum(person.values()))  

Output

30
  1. zip(): Fungsi zip() digunakan untuk menggabungkan dua buah list atau lebih menjadi sebuah dictionary.
# Mendeklarasikan dua buah list
keys = ["name", "age", "city"]
values = ["John", 30, "New York"]
# Menggabungkan dua buah list menjadi sebuah dictionary
person = dict(zip(keys, values))
print(person)  

Output

{'name': 'John', 'age': 30, 'city': 'New York'}
⚠️ **GitHub.com Fallback** ⚠️