Struktur Data Python : List dan Tuple


[tutorial ini dibuat menggunakan python versi 3.11]
LIST
Dalam Python, list adalah tipe data yang terdiri dari koleksi elemen-elemen. List merupakan struktur data yang sangat dinamis, dapat menyimpan elemen dengan tipe data apapun, seperti angka, string, objek, atau bahkan list lainnya. Elemen -elemen di dalam list juga tidak besifat unik, sehingga dalam sebuah objek list dapat menampung elemen yang sama sebanyak apapun. List bersifat mutable sehingga dapat diubah, ditambah, dihapus serta diubah urutannya.
Membuat List
List dapat dibuat menggunakan kurung siku [], dengan setiap elemen dituliskan didalamnya dan dipisahkan dengan tanda koma. List juga dapat dibuat melalui fungsi list. Fungsi ini biasanya digunakan untuk mengonversi tipe data lainnya yang sesuai menjadi list.
Kode
# list dengan 4 elemen bertipe str
list_pokemon = ["Pikachu", "Bulbasaur", "Charmender", "Squirtle"]
print(list_pokemon)
# inisiasi list tanpa elemen
list_kosong = []
print(list_kosong)
# atau dengan fungsi list
list_kosong = list()
print(list_kosong)
# list dengan sejumlah elemen yang sama
list_100 = [100] * 5
print(list_100)
# list dengan berbagai tipe data
list_campuran = ["Ash Ketchum", 10, 10, 3.14, "Pikachu", True]
print(list_campuran)
# list dengan elemen berupa list
list_dalam_list = [
"Ash Ketchum",
["Pikachu", "Bulbasaur", "Charmender"],
[100, 120, 80],
]
print(list_dalam_list)
# menggabungkan 2 list
list_1 = ["A", "B", "C"]
list_2 = ["X", "Y", "Z"]
list_gabung = list_1 + list_2
print(list_gabung)# OUTPUT ['Pikachu', 'Bulbasaur', 'Charmender', 'Squirtle'] [] [] [100, 100, 100, 100, 100] ['Ash Ketchum', 10, 10, 3.14, 'Pikachu', True] ['Ash Ketchum', ['Pikachu', 'Bulbasaur', 'Charmender'], [100, 120, 80]] ['A', 'B', 'C', 'X', 'Y', 'Z']
Mengakses Elemen (Slicing)
Elemen dalam list diakses berdasarkan urutan indeksnya menggunakan sintaks nama_list[index]. Indeks pada list dimulai dari 0. Artinya, elemen pertama akan memiliki indeks 0, elemen kedua dengan indeks 1, dan seterusnya. List juga dapat diakses menggunakan indeks negatif. Indeks -1 menunjukkan elemen paling akhir pada list, indeks -2 elemen kedua terakhir dan seterusnya.
Kode
# SLICING 1 ELEMEN # indeks list dimulai dari 0 list_pokemon = ["Pikachu", "Bulbasaur", "Charmender", "Squirtle", "Snorlax"] # mengakses elemen dengan indeks first_el = list_pokemon[0] # Pikachu third_el = list_pokemon[2] # Charmender print(first_el) print(third_el) # mengkases dengan indeks negatif # indeks -1 -> elemen terakhir dst last_el = list_pokemon[-1] # Snorlax fourth_el = list_pokemon[-2] # Squirtle print(last_el) print(fourth_el)
# OUTPUT Pikachu Charmender Snorlax Squirtle
Elemen list tidak hanya dapat diakses satu per satu. Sekumpulan elemen juga dapat diakses sekaligus dengan mengatur indeks awal dan indeks terakhir elemen yang akan diambil dengan format nama_list[idx_start:idx_stop].
Berikut adalah aturan dalam penulisan batas-batas indeks untuk mengakses elemen list :
- indeks batas bawah bersifat inklusif (misal : indeks batas bawah = 2, maka elemen dengan indeks
2akan masuk dalam slicing) - indeks batas atas besifat eksklusif (misal : indeks batas atas = 4, maka elemen terakhir yang diambil adalah dengan indeks
3, sedangkan elemen dengan indeks 4 tidak termasuk dalam slicing) - Karena batas atas bersifat eksklusif, maka perlu hati-hati menggunakan indeks negatif sebagai batas atas (indeks
-1untuk batas atas berarti elemen terakhir yang diambil adalah elemen dengan indeks-2atau elemen kedua terakhir) - Jika slicing dilakukan dari elemen pertama (indeks ke-0) maka batas bawah tidak perlu ditulis), begitu pula jika slicing dilakukan sampai elemen terakhir, maka batas atas tidak perlu ditulis)
Kode
# SLICING BANYAK ELEMEN list_pokemon = ["Pikachu", "Bulbasaur", "Charmender", "Squirtle", "Snorlax"] # elemen 1 dan 3 # batas atas indeks list : exlusive # untuk slicing index 0-2 gunakan [0:3] slice_el_1 = list_pokemon[0:3] # ['Pikachu', 'Bulbasaur', 'Charmender'] print(slice_el_1) # slicing dari elemen pertama # batas bawah dapat dikosongkan slice_el_2 = list_pokemon[:2] # ['Pikachu', 'Bulbasaur'] print(slice_el_2) # slicing indeks ke-2 dan ke-3 # (elemen ke-3 dan ke-4) slice_el_3 = list_pokemon[2:4] # ['Charmender', 'Squirtle'] print(slice_el_3) # slicing dengan indeks negatif slice_el_4 = list_pokemon[-4:-2] # ['Bulbasaur', 'Charmender'] print(slice_el_4) # slicing hingga elemen terakhir # batas atas dapat dikosongkan slice_el_5 = list_pokemon[-3:] # ['Charmender', 'Squirtle', 'Snorlax'] print(slice_el_5)
# OUTPUT ['Pikachu', 'Bulbasaur', 'Charmender'] ['Pikachu', 'Bulbasaur'] ['Charmender', 'Squirtle'] ['Bulbasaur', 'Charmender'] ['Charmender', 'Squirtle', 'Snorlax']
Mengakses List dalam List
Elemen dalam list dapat berupa tipe data apapun termasuk list. Untuk mengakses elemen list di dalam list tersebut dapat dilakukan dengan cara yang sama seperti sebelumnya. Pertama, lakukan slicing pada list utama, kemudian lakukan lagi slicing pada list didalamnya (list[indeks_list][indeks_el_list]).
Kode
# List di dalam List
list_pokemon = [
["Pikachu", "Raichu"],
["Charmander", "Charmeleon", "Charizard"],
["Bulbasaur", "Ivysaur", "Venusaur"],
["Squirtle", "Wartortle", "Blastoise"],
]
# mengakses elemen list
first_element = list_pokemon[0] # ["Pikachu", "Raichu"]
print(first_element)
last_element = list_pokemon[-1] # ["Squirtle", "Wartortle", "Blastoise"]
print(last_element)
# akses elemen list di dalam list
pikachu = list_pokemon[0][0] # Pikachu
print(pikachu)
venusour = list_pokemon[2][-1] # Venusaur
print(venusour)
# slicing elemen di dalam elemen
slice_el = list_pokemon[2][:2] # ['Bulbasaur', 'Ivysaur']
print(slice_el)# OUTPUT ['Pikachu', 'Raichu'] ['Squirtle', 'Wartortle', 'Blastoise'] Pikachu Venusaur ['Bulbasaur', 'Ivysaur']
Iterasi Elemen List
Elemen list juga dapat diakses secara berurutan melalui iterasi for loop. Pada setiap iterasi, kita dapat mengakses elemen list tersebut secara langsung. Kita juga dapat mengakses indeks dan nilai dari setiap elemen dengan cara mengonversi list menjadi objek enumerate.
Kode
list_pokemon = ["Pikachu", "Bulbasaur", "Charmender", "Squirtle", "Snorlax"]
# iterasi elemen list
for pokemon in list_pokemon:
print("Pokemon saat ini :", pokemon)
print(f"{'':-^40}")
# iterasi elemen list dengan indeks
for key, pokemon in enumerate(list_pokemon):
print(f"iterasi ke-{key+1} :")
print(f" -----> {pokemon}")# OUTPUT
Pokemon saat ini : Pikachu
Pokemon saat ini : Bulbasaur
Pokemon saat ini : Charmender
Pokemon saat ini : Squirtle
Pokemon saat ini : Snorlax
----------------------------------------
iterasi ke-1 :
-----> Pikachu
iterasi ke-2 :
-----> Bulbasaur
iterasi ke-3 :
-----> Charmender
iterasi ke-4 :
-----> Squirtle
iterasi ke-5 :
-----> SnorlaxManipulasi Elemen
List merupakan tipe struktur data yang mutable sehingga elemen di dalamnya dapat dimodifikasi ataupun dihapus. Elemen baru juga dapat ditambahkan ke dalam list. Objek list secara keseluruhan juga dapat dimodifikasi, misalkan membalik urutan elemen dan mengurutkan elemennya secara ascending maupun descending.
Merubah elemen list dapat dilakukan dengan cara yang sama seperti mengakses elemen tersebut. Pilih elemen berdasarkan indeks yang diinginkan kemudian berikan nilai baru pada elemen tersebut.
Kode
data = [0] * 4
print(f"data : {data}")
# merubah nilai 1 elemen
data[0] = 100
data[-1] = 50
print(f"data : {data}")
# merubah nilai beberapa elemen
data[1:3] = [70, 80]
print(f"data : {data}")# OUTPUT data : [0, 0, 0, 0] data : [100, 0, 0, 50] data : [100, 70, 80, 50]
Menambah dan Menghapus Elemen
Berikut beberapa metode yang berguna untuk menambah atau menghapus elemen dari list:
append: menambah elemen baru pada bagian akhirlistinsert: menambah elemen baru pada posisi indeks tertentupop: menghapus elemen pada indeks tertentu. Jika indeks tidak dituliskan, maka akan menghapus elemen terakhir. fungsipopmengembalikan nilai dari elemen yang dihapus. Sehingga dapat disimpan ke suatu variabel jika diperlukanremove: menghapus elemen dengan nilai tertentu. Jika terdapat beberapa elemen dengan nilai tersebut, maka hanya akan menghapus satu elemen saja yaitu elemen pertama yang sesuaiclear: menghapus semua elemen sehingga menjadi list kosong[]
Kode
# operasi list
list_pokemon = ["Pikachu", "Bulbasaur"]
print(f"Daftar : {list_pokemon}")
# melihat jumlah elemen list
jumlah_pokemon = len(list_pokemon)
print(f"Jumlah pokemon saat ini : {jumlah_pokemon}\n")
# menambah elemen dibagian akhir
print("APPEND : Squirtle dan Snorlax")
list_pokemon.append("Squirtle")
list_pokemon.append("Snorlax")
print(f"Daftar Pokemon : {list_pokemon}\n")
# menambah elemen pada indeks tertentu
print("INSERT : Charmender pada indeks ke-2")
list_pokemon.insert(2, "Charmender")
print(f"Daftar : {list_pokemon}\n")
# menghapus elemen dengan indeks tertentu
# pop tanpa indeks akan menghapus elemen terakhir
print("POP : Menghapus Snorlax")
hapus = list_pokemon.pop() # atau pop(-1)
print(f"Hapus : {hapus}")
print(f"Daftar : {list_pokemon}\n")
# menghapus elemen berdasarkan nilai
print("REMOVE : Menghapus Bulbasour")
hapus = list_pokemon.remove("Bulbasaur")
print(f"Hapus : {hapus}")
print(f"Daftar : {list_pokemon}\n")
# menghapus semua elemen
list_pokemon.clear()
print("CLEAR : menghapus semua elemen")
print(f"Daftar : {list_pokemon}")# OUTPUT Daftar : ['Pikachu', 'Bulbasaur'] Jumlah pokemon saat ini : 2 APPEND : Squirtle dan Snorlax Daftar Pokemon : ['Pikachu', 'Bulbasaur', 'Squirtle', 'Snorlax'] INSERT : Charmender pada indeks ke-2 Daftar : ['Pikachu', 'Bulbasaur', 'Charmender', 'Squirtle', 'Snorlax'] POP : Menghapus Snorlax Hapus : Snorlax Daftar : ['Pikachu', 'Bulbasaur', 'Charmender', 'Squirtle'] REMOVE : Menghapus Bulbasour Hapus : None Daftar : ['Pikachu', 'Charmender', 'Squirtle'] CLEAR : menghapus semua elemen Daftar : []
Merubah Urutan Elemen
Urutan elemen dalam list juga dapat diatur ulang. Terdapat 2 metode yang dapat digunakan untuk merubah urutan elemen list yaitu:
reverse: membalik urutan elemen, dimana elemen pertama menjadi elemen terakhir, elemn kedua menjadi elemen kedua terakhir dan seterusnyasort: mengurutkan elemen list. Pengurutan dapat dilakukan secaraascendingataudescending. Secara default, metodesortakan mengurutkan berdasarkan nilai (misal angka terkecil sampai terbesar, atau dalam contoh teks, diurutkan sesuai abjad)- metode
sortdapat melakukan sorting kustom dengan menentukan parameterkey. Pada contoh di bawah ini, kita membuat fungsi lambda untuk sorting menurut panjang karakter elemenlist(misal :Pikachu7 karakter,Bulbasaur9 karater, dst).
note : fungsi lambda akan dibahas pada bagian Fungsi pada Python.
Kode
# Merubah urutan elemen list
list_pokemon = ["Pikachu", "Bulbasaur", "Charmender", "Squirtle"]
print(f"Original : {list_pokemon}\n")
# reverse
list_pokemon.reverse()
print(f"Reversed : {list_pokemon}\n")
# sort ASC
list_pokemon.sort()
print(f"Sorted (ASC): {list_pokemon}\n")
# sort DESC
list_pokemon.sort(reverse=True)
print(f"Sorted (DESC): {list_pokemon}\n")
# sort custom
# contoh diurutkan berdasarkan panjang nama
# dari nama yang paling pendek sampai terpanjang
list_pokemon.sort(key=lambda el:len(el))
print(f"Sorted (kustom): {list_pokemon}")# OUTPUT Original : ['Pikachu', 'Bulbasaur', 'Charmender', 'Squirtle'] Reversed : ['Squirtle', 'Charmender', 'Bulbasaur', 'Pikachu'] Sorted (ASC): ['Bulbasaur', 'Charmender', 'Pikachu', 'Squirtle'] Sorted (DESC): ['Squirtle', 'Pikachu', 'Charmender', 'Bulbasaur'] Sorted (kustom): ['Pikachu', 'Squirtle', 'Bulbasaur', 'Charmender']
Metode dan operator Lainnya
count: menghitung banyaknya elemen dengan kriteria tertentu di dalam sebuah listindex: mengembalikan indeks dari elemen dalam list berdasarkan nilai elemen yang diberikan. Jika nilai yang dicari cocok dengan beberapa elemen sekaligus, maka indeks yang dikembalikan adalah indeks dari elemen yang muncul pertamaindannot in: dua operator ini sebenarnya bukan metode pada objek list. Namun kita dapat menggunakannya untuk mengecek apakah suatu elemen eksis atau tidak di dalam sebuah list.
Kode
# Lainnya
data = [90, 80, 80, 60, 80, 70]
# count
# menghitung jumlah elemen dengan nilai tertentu
count_el_80 = data.count(80)
print(f"Nilai 80 ada {count_el_80} elemen")
# mencari indeks dari nilai elemen
idx_60 = data.index(60)
print(f"Nilai 60 ada pada indeks ke-{idx_60}")
# jika terdapat elemen yang sama
# akan mengembalikan indeks elemen pertama
idx_80 = data.index(80)
print(f"Nilai 80 ada pada indeks ke-{idx_80}")
# sum, min, max
print(f"sum = {sum(data)}")
print(f"min = {min(data)}")
print(f"max = {max(data)}")
# in dan not in
print(f"Angka 80 ada? {80 in data}")
print(f"Angka 100 ada? {100 in data}")
print(f"Angka 100 tidak ada? {100 not in data}")# OUTPUT Nilai 80 ada 3 elemen Nilai 60 ada pada indeks ke-3 Nilai 80 ada pada indeks ke-1 sum = 460 min = 60 max = 90 Angka 80 ada? True Angka 100 ada? False Angka 100 tidak ada? True
TUPLE
Struktur data tuple pada dasarnya mirip dengan list, namun bersifat immutable (tidak dapat diubah setelah dibuat). Tuple diwakili dengan tanda kurung biasa () atau tanpa tanda kurung sama sekali, dan elemen-elemennya dipisahkan dengan tanda koma. Perbedaan utama antara tuple dan list adalah bahwa tuple bersifat tidak dapat diubah, artinya setelah sebuah tuple dibuat, elemen-elemennya tidak bisa ditambahkan, diubah, atau dihapus.
Tuple sangat tepat digunakan untuk menyimpan daftar koleksi dimana elemen-elemennya tetap atau tidak perlu dirubah. Pada kumpulan data yang sangat besar, performa pemrosesan data pada tuple akan jauh lebih cepat dibandingkan pada list untuk daftar elemen yang sama. Oleh karena itu jika data memadai disimpan dalam bentuk tuple maka akan lebih baik dibandingkan dalam list.
Membuat Tuple
Tuple dapat dibuat menggunakan tanda kurung biasa () atau tanpa tanda kurung sama sekali, dimana setiap elemen dituliskan di dalamnya dan dipisahkan dengan tanda koma. Tuple juga dapat dibuat melalui fungsi tuple. Fungsi ini biasanya digunakan ketika mengonversi data dengan tipe lainnya menjadi tipe tuple
Kode
tuple_pokemon = ("Pikachu", "Bulbasaur", "Charmender")
print(tuple_pokemon)
# atau
tuple_pokemon = "pikachu", "Bulbasaur", "Charmender"
print(tuple_pokemon)
# tuple dari list
tuple_from_list = tuple(["Ash Ketchum", "Pikachu", 10, 20, 30])
print(tuple_from_list)
# menggabung kan 2 tuple
tuple_1 = ("Pikachu", "Bulbasaur")
tuple_2 = ("Charmender", "Squirtle")
tuple_join = tuple_1 + tuple_2
print(tuple_join)# OUTPUT
('Pikachu', 'Bulbasaur', 'Charmender')
('pikachu', 'Bulbasaur', 'Charmender')
('Ash Ketchum', 'Pikachu', 10, 20, 30)
('Pikachu', 'Bulbasaur', 'Charmender', 'Squirtle')Operasi pada Tuple
Operasi yang dapat dilakukan pada tuple secara umum hampir sama dengan list. Metode-metode yang digunakan juga sama dengan metode pada list. Namun karena sifatnya yang immutable operasi yang bersifat modifikasi, seperti merubah, menambah, menghapus elemen tidak dapat dilakukan pada tuple.
Berikut contoh-contoh operasi pada tuple:
Kode
tuple_pokemon = ("Pikachu", "Bulbasaur", "Charmender", "Squirtle", "Snorlax")
# akses elemen
first_el = tuple_pokemon[0] # Pikachu
print(f"Elemen ke-1 : {first_el}")
last_el = tuple_pokemon[-1] # Snorlax
print(f"Elemen terakhir : {last_el}")
# slice elemen indeks 1 sampai 3
# (elemen ke 2 -4)
slice_el = tuple_pokemon[1:4] # ('Bulbasaur', 'Charmender', 'Squirtle')
print(f"Slice : {slice_el}\n")
# Iterasi dengan tuple
for el in tuple_pokemon:
print(f"Iterasi saat ini : {el}")
# len, count, max, min, index
data = [90, 80, 80, 60, 80, 70]
print(f"\nBanyak elemen : {len(data)}")
print(f"Banyaknya nilai 80 : {data.count(80)}")
print(f"Nilai terendah : {min(data)}")
print(f"Nilai tertinggi : {max(data)}")
print(f"indeks untuk nilai 70 : {data.index(70)}\n")
# merubah tuple menjadi list
list_from_tuple = list(tuple_pokemon)
print("List dari tuple :")
print(list_from_tuple)# OUTPUT
Elemen ke-1 : Pikachu
Elemen terakhir : Snorlax
Slice : ('Bulbasaur', 'Charmender', 'Squirtle')
Iterasi saat ini : Pikachu
Iterasi saat ini : Bulbasaur
Iterasi saat ini : Charmender
Iterasi saat ini : Squirtle
Iterasi saat ini : Snorlax
Banyak elemen : 6
Banyaknya nilai 80 : 3
Nilai terendah : 60
Nilai tertinggi : 90
indeks untuk nilai 70 : 5
List dari tuple :
['Pikachu', 'Bulbasaur', 'Charmender', 'Squirtle', 'Snorlax']Dasar-Dasar Pemrograman dengan Python
Selanjutnya : Set





