Struktur Data Python : List dan Tuple

Tutorial 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 list:

  • append : menambah elemen baru pada bagian akhir list
  • insert : menambah elemen baru pada posisi indeks tertentu
  • pop : menghapus elemen pada indeks tertentu. Jika indeks tidak dituliskan, maka akan menghapus elemen terakhir. fungsi pop mengembalikan nilai dari elemen yang dihapus. Sehingga dapat disimpan ke suatu variabel jika diperlukan
  • remove : menghapus elemen dengan nilai tertentu. Jika terdapat beberapa elemen dengan nilai tersebut, maka hanya akan menghapus satu elemen saja yaitu elemen pertama yang sesuai
  • clear : 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 seterusnya
  • sort : mengurutkan elemen list. Pengurutan dapat dilakukan secara ascending atau descending. Secara default, metode sort akan mengurutkan berdasarkan nilai (misal angka terkecil sampai terbesar, atau dalam contoh teks, diurutkan sesuai abjad)
  • metode sort dapat melakukan sorting kustom dengan menentukan parameter key. Pada contoh di bawah ini, kita membuat fungsi lambda untuk sorting menurut panjang karakter elemen list (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 list
  • index : 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 pertama
  • in dan not 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']

Selanjutnya : Set

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Isi