Data Structure

Selain menggunakan tipe data number, string dan boolean, nilai dari suatu variable dapat direpresentasikan oleh data structure. Pada chapter ini, kita akan membahas dua data structure di Python yang lazim kita temui juga di bahasa pemrograman lain, yaitu list dan dictionary.

List

List atau array adalah data structure yang dapat menyimpan kumpulan dari beberapa nilai/value. Berikut adalah contoh cara penulisan list dalam kode Python:

my_list = [1, 2, 3, 4]

print(my_list) # output: [1, 2, 3, 4]

Nilai di dalam list seringkali disebut sebagai item.

Pada bahasa Python, kita dapat menggabungkan beberapa tipe data yang berbeda seperti number, string, boolean ke dalam satu list. Kita juga bisa memasukkan list menjadi item pada suatu list.

my_list = [1, '2', 3.14, False, [1, 2, 3]]

Untuk mengakses item di dalam list, kita dapat menggunakan index. Item pertama akan memiliki index 0, item kedua memiliki index 1, item ketiga memiliki index 2 dst. Sehingga secara logis, item terakhir pada list akan memiliki index n - 1, dimana n adalah jumlah item pada list.

my_list = [1, 2, 3, 4]

print(my_list[0]) # output: 1
print(my_list[2]) # output: 3
print(my_list[0] + my_list[1] + my_list[2]) # output: 6

Apabila kita mencoba untuk mengakses elemen dengan index > n - 1, Python akan memunculkan output error.

my_list = [1, 2, 3, 4]

print(my_list[5])
# output: IndexError: list index out of range

Selain untuk mengakses item dalam list satu persatu, kita juga dapat menggunakan index range untuk mengakses beberapa elemen yang berurutan secara sekaligus (sublist).

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(my_list[0:5]) # output: [1, 2, 3, 4, 5]
print(my_list[5:7]) # output: [6, 7]
print(my_list[4:]) # output: [5, 6, 7, 8, 9, 10]
print(my_list[:5]) # output: [1, 2, 3, 4, 5]

my_list[0:5] = [5, 4, 3, 2, 1]
print(my_list) # output: [5, 4, 3, 2, 1, 6, 7, 8, 9, 10]

Untuk mendapatkan informasi jumlah item pada list, kita dapat menggunakan fungsi len.

my_list = [1, 2, 3, 4]
list_length = len(my_list)

print(list_length) # output: 4
print(my_list[list_length - 1]) # output: 4

Manipulasi list

Struktur dan isi item dari suatu list dapat kita manipulasi sesuai dengan keinginan. Salah satu contohnya, kita dapat mengganti nilai item pada suatu list dengan memanfaatkan index seperti pada contoh berikut:

my_list = [1, 2, 3, 4]

my_list[2] = 100
print(my_list) # output: [1, 2, 100, 4]

Selain mengganti nilai, kita juga dapat menambahkan item pada list dan menggabungkan dua list menjadi satu.

my_list = []
my_list.append(1)
my_list.append(2)
my_list.append(3)
print(my_list) # output: [1, 2, 3]

other_list = [4, 5, 6, 7]
merged_list = my_list + other_list
print(merged_list) # output: [1, 2, 3, 4, 5, 6, 7]

List juga dapat digabungkan menjadi satu nilai string menggunakan fungsi join. Operasi ini hanya dapat dilakukan untuk list yang semua nilai item-nya bertipe data string.

my_list = ['Taylor', 'Swift', 'won', 'grammy', 'award']
print(' '.join(my_list)) # output: 'Taylor Swift won grammy award'

Untuk mengurangi item pada list, kita dapat menggunakan fungsi pop dan remove.

my_list = [1, 2, 3, 4]
removed_item = my_list.pop() # fungsi ini akan menghapus item terakhir pada list

print(my_list) # output: [1, 2, 3]
print(removed_item) # output: 4

my_list = [1, 2, 2, 3, 2]
my_list.remove(2) # fungsi ini hanya akan menghapus item bernilai 2 yang muncul pertama kali pada list

print(my_list) # output: [1, 2, 3, 2]

Terakhir, untuk mengurutkan item kita dapat menggunakan fungsi sort.

my_list = [4, 2, 1, 3]
my_list.sort()

print(my_list) # output: [1, 2, 3, 4]

my_list.sort(reverse = True)
print() # output: [4, 3, 2, 1]

fruits = ['cherry', 'apple', 'strawberry', 'grapes', 'apricot']
fruits.sort()

print(fruits) # output: ['apple', 'apricot', 'cherry', 'grapes', 'strawberry']

Hubungan antara string dan list

Tipe data string dan data structure list memiliki hubungan yang dekat. Hal ini disebabkan kedua konsep tersebut memiliki sifat yang mirip. Berdasarkan penjelasan list di chapter ini, bisa kita rangkum bahwa list merupakan kumpulan dari beberapa item. Sedangkan tipe data string pada hakikatnya juga merupakan kumpulan dari beberapa karakter. Sehingga, ada beberapa operasi dari list yang bisa kita lakukan juga pada tipe data string. Sebagai contoh, kita juga bisa menggunakan index untuk mengakses dan memanipulasi karakter pada string.

headline_title = 'Taylor Swift will release her new album \"Midnight\" next year'
print(headline_title[0]) # output: 'T'
print(headline_title[0:6]) # output: 'Taylor'

Namun berbeda dengan list, apabila kita mencoba mengganti nilai item dengan menggunakan index, program Python akan mengeluarkan pesan error.

my_name = 'John Doe'
my_name[0] = 'B' # TypeError: 'str' object does not support item assignment

Dictionary

Dictionary atau hash map adalah data structure yang menyimpan data dengan format key-value. Berbeda dengan list yang akses nilai-nya melalui index yang dihasilkan secara otomatis (0...(n-1)), nilai pada dictionary diakses menggunakan key yang kita definisikan sendiri.

my_dict = {
    'base_price': 50000,
    'delivery_fee': 5000,
    'discount_rate': 0.25
}
print(my_dict) # output: {'base_price': 50000, 'delivery_fee': 5000, 'discount_rate': 0.25}
print(my_dict['base_price']) # output: 50000
print(my_dict['base_price'] * my_dict['discount_rate']) # output: 12500

Kita dapat mengeset value pada dictionary dengan tipe data number, string, boolean, list, dan dictionary juga (nested) seperti pada contoh berikut:

my_dict = {
    'base_price': 50000,
    'can_use_discount': True,
    'discount_rate': 0.25,
    'payment_methods': ['atm', 'credit_card', 'digital_wallet'],
    'payment_method_fees': {
        'atm': {
            'type': 'fixed',
            'amount': 1500
        },
        'credit_card': {
            'type': 'rate',
            'amount': 0.01
        }
    }
}

Pada umumnya, key pada dictionary bertipe data string. Namun, kita juga bisa membuat key dengan tipe data number. Tipe data boolean juga bisa digunakan sebagai key, namun penggunaannya sangat jarang.

my_dict = {
    1: 'satu',
    2.5: 'dua koma lima',
    3: 3,
    False: True
}
print(my_dict) # output: {1: 'satu', 2: 'dua koma lima', 3: 3, False: True}
print(my_dict[1]) # output: 'satu'
print(my_dict[False]) # output: True

Key-key pada dictionary dipastikan unik. Apabila kita mencoba mendefinisikan dua key yang sama persis pada satu dictionary, Python akan hanya mengambil pasangan key-value yang terakhir.

my_dict = {
    'base_price': 50000,
    'base_price': 5000,
    'discount_rate': 0.25
}
print(my_dict) # output: {'base_price': 5000, 'discount_rate': 0.25}

Untuk mendapatkan semua key pada sebuah variable dictionary, kita dapat menggunakan fungsi keys.

my_dict = {
    'base_price': 50000,
    'delivery_fee': 5000,
    'discount_rate': 0.25
}
my_dict_keys = my_dict.keys()
print(my_dict_keys) # output: dict_keys(['base_price', 'delivery_fee', 'discount_rate'])
print(len(my_dict_keys)) # output: 3

Manipulasi dictionary

Seperti halnya list, kita juga dapat memanipulasi struktur dari dictionary yang kita definisikan. Pertama, kita bisa mengganti nilai atau value pada key tertentu dalam dictionary.

my_dict = {
    'base_price': 50000,
    'delivery_fee': 5000,
    'discount_rate': 0.25
}

my_dict['discount_rate'] = 0.05

print(my_dict) # output: {'base_price': 50000, 'delivery_fee': 5000, 'discount_rate': 0.05}

Selain itu, kita juga bisa menambahkan key-value baru ke dalam dictionary yang telah kita definisikan seperti contoh berikut:

my_dict = {
    'base_price': 50000,
    'delivery_fee': 5000,
    'discount_rate': 0.25
}

my_dict['payment_methods'] = ['atm', 'credit_card', 'digital_wallet']

print(my_dict)
# output:
# {
#     'base_price': 50000,
#     'delivery_fee': 5000,
#     'discount_rate': 0.25,
#     'payment_methods':
#     ['atm', 'credit_card', 'digital_wallet']
# }

Untuk menghapus key pada dictionary, kita dapat menggunakan fungsi del dan pop.

my_dict = {
    'base_price': 50000,
    'delivery_fee': 5000,
    'discount_rate': 0.25
}

del my_dict['discount_rate']
print(my_dict) # output: {'base_price': 50000, 'delivery_fee': 5000}

my_dict.pop('delivery_fee', None)
print(my_dict) # output: {'base_price': 50000}

Untuk menggabungkan dua dictionary, Python menyediakan fungsi update yang dapat digunakan seperti pada contoh:

my_dict = {
    'base_price': 50000,
    'delivery_fee': 5000,
    'discount_rate': 0.25
}

other_dict = {
    'discount_rate': 0.05,
    'payment_methods': ['atm', 'credit_card', 'digital_wallet'],
}

my_dict.update(other_dict)

print(my_dict)
# output:
# {
#     'base_price': 50000,
#     'delivery_fee': 5000,
#     'discount_rate': 0.05,
#     'payment_methods': ['atm', 'credit_card', 'digital_wallet']
# }