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
2
akan 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
-1
untuk batas atas berarti elemen terakhir yang diambil adalah elemen dengan indeks-2
atau 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 : -----> Snorlax
Manipulasi 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 lis
t:
append
: menambah elemen baru pada bagian akhirlist
insert
: menambah elemen baru pada posisi indeks tertentupop
: menghapus elemen pada indeks tertentu. Jika indeks tidak dituliskan, maka akan menghapus elemen terakhir. fungsipop
mengembalikan 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 secaraascending
ataudescending
. Secara default, metodesort
akan mengurutkan berdasarkan nilai (misal angka terkecil sampai terbesar, atau dalam contoh teks, diurutkan sesuai abjad)- metode
sort
dapat melakukan sorting kustom dengan menentukan parameterkey
. Pada contoh di bawah ini, kita membuat fungsi lambda untuk sorting menurut panjang karakter elemenlist
(misal :Pikachu
7 karakter,Bulbasaur
9 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 pertamain
dannot 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