List (Lanjutan)

Materi sebelumya telah membahas bagaimana mengakses dan mengubah data pada List secara sederhana. Sekarang, kita akan belajar menelusuri dan memproses data List secara keseluruhan dengan pengulangan. Pengulangan atau looping berarti melakukan suatu perintah/baris program yang sama berkali-kali. Bayangkan bila kita mempunyai sebuah List berisi nama-nama negara di dunia, lalu kita ingin menampilkannya. Berapa banyak baris perintah print yang harus kita lakukan, untuk menampilkan seluruh negara tersebut? Dengan looping, kita hanya perlu mengetik beberapa baris program untuk tujuan tersebut, tanpa perlu mengetik print berkali-kali. Mari kita lihat contoh berikut ini.

members =  ['john', 'sonny', 'jason', 'mike', 'anne', 'bob', 'bertha']
print(members[0])
print(members[1])
print(members[2])
print(members[3])
print(members[4])
print(members[5])
print(members[6])

List members berisi 7 nama. Program akan menampilkan tujuh nama tersebut satu per satu. Dengan cara yang telah dipelajari sebelumnya, kita bisa menggunakan perintah print lalu mengakses List members[0] sampai members[6], total ada 7 baris perintah print pada program. Sekarang lihat contoh program di bawah ini, copy dan jalankan pada editor masing-masing.

members =  ['john', 'sonny', 'jason', 'mike', 'anne', 'bob', 'bertha']
for member in members:
    print(member)

Perhatikan dua baris program yang dicetak tebal. Baris program tersebut memberi hasil yang sama dengan program yang terdiri dari 7 baris perintah print. Keyword for tersebut merupakan syntax untuk melakukan pengulangan. Baris kedua for tersebut bermakna: untuk setiap data (member) pada List members, lakukan perintah sebagai berikut. Dalam contoh di atas, perintah yang diberikan adalah print, yang ditulis tepat di bawah keyword for, dengan indentasi 1 Tab. Aturan penulisan for yang diakhiri tanda titik dua (:) dan penggunaan indentasi pada perintah di bawahnya, adalah wajib. Apabila tidak dipenuhi, interpreter akan memberi pesan “syntax error“. Berikut penjelasan syntax for secara lebih detail:

data_lists = [data1, data2, data3, dan seterusnya]
for item in data_lists:
    # 2 baris perintah berikut dijalankan berulang, sebanyak jumlah data list
    perintah ke - 1 dalam for
    perintah ke - 2 dalam for

# 2 atau lebih baris perintah berikut di luar for, dijalankan hanya sekali
perintah ke -1 di luar for #dijalankan satu kali
perintah ke-2 di luar for #dijalankan satu kali
dan seterusnya....

Pada skema for di atas bisa dilihat dengan jelas, bahwa programmer tidak perlu menyatakan indeks ataupun mengetahui jumlah data pada sebuah List. Data yang diproses oleh for akan selalu dimulai dari indeks ke 0, diikuti oleh data indeks ke 1, lalu ke 2, dan seterusnya sampai indeks terakhir. Kata item pada skema di atas, merupakan variable untuk menyimpan data dari List yang sedang di-iterasi satu per satu, untuk kemudian dipakai oleh baris perintah berikutnya. Karena merupakan nama variable, tentunya kita bisa menggunakan kata apa saja. Best practice-nya adalah, kita memakai kata tunggal dari nama List yang sedang diakses. Seperti misalnya “for member in members“, atau “for fruit in fruits“, dan seterusnya.

Kemudian, setelah pernyataan for diakhiri titik dua (:), maka setiap baris perintah di bawahnya, yang akan dieksekusi dalam lingkup for, dituliskan dengan indentasi 1 Tab. Perintah berikutnya yang ingin dieksekusi di luar konteks for, dimundurkan kembali indentasinya, sehingga sejajar dengan for. Jika programmer “keliru” mengetikkan “perintah ke-2 dalam for” tanpa indentasi, maka perintah tersebut akan dijalankan di luar konteks for, yang tentunya memberi hasil berbeda. Karena itu, perhatikan penggunakan indentasi dalam pengetikkan program.

Berikut contoh program sederhana lainnya, yang menggunakan List nama teman, dan membuat pesan untuk tiap-tiap nama. Perhatikan baris program yang di tandai garis kuning:

Contoh For
Mengakses List dengan FOR
  • friend.title() = method title() berfungsi mengubah karakter pertama suatu String menjadi huruf kapital, sudah pernah kita gunakan sebelumnya dalam pembahasan tipe data String
  • len(friends) = fungsi len() berguna untuk menghitung panjang (jumlah data) pada List
  • str(jumlah_teman) = method str() berfungsi mengubah data numerik menjadi String, karena perintah print hanya menerima argumen String, sudah pernah kita gunakan juga sebelumnya dalam pembahasan tipe data String

Setelah membaca dan memahami program di atas, cobalah untuk membuat program serupa, dengan mengganti data yang digunakan, dan pesan yang ditampilkan.


Membuat List Numerik

Pada contoh-contoh List sebelumnya, data yang digunakan selalu berupa String. Namun, List juga dapat berisi angka. Daftar angka bisa digunakan oleh program untuk berbagai keperluan. Misalkan saja, dalam aplikasi game multiplayer, score setiap pemain perlu disimpan, posisi koordinat masing-masing pemain, dan seterusnya. Karena itu, kita akan sedikit membahas fungsi dan trik mudah untuk membuat List angka.

Fungsi range() dan list()

Fungsi range() berguna mengembalikan deretan nilai numerik tertentu. Contoh di bawah ini, kita memanggil fungsi range() untuk mendapat nilai angka 1 sampai 4.

>>>for number in range(1,5):
>>>    print(number)
1
2
3
4

Perhatikan bahwa angka 5 tidak ikut ditampilkan. Jika ingin mendapatkan angka 5, maka  argumen diganti menjadi range(1,6).

Jika fungsi range() dipanggil dan dijadikan argumen ke dalam fungsi list(), maka kita akan memperoleh sebuah tipe data List berisi nilai numerik tertentu. Berikut beberapa contoh penggunaannya.

>>>numbers = list(range(5,11))
>>>print(numbers)
[5,6,7,8,9,10]

>>>numbers = list(range(1,5))
>>>for number in numbers:
>>>    print(number*10)
10
20
30
40

Pada kedua contoh di atas, angka yang dihasilkan range() selalu berurutan (hanya berselisih 1 angka). Jika ingin menampilkan deret yang bervariasi, misal membuat List bilangan ganjil, maka kita perlu menambahkan argumen ke-3 pada fungsi range(). Contohnya sebagai berikut.

>>>nomor_ganjil = list(range(1,10,2))
>>>print(nomor_ganjil)
[1,3,5,7,9]

>>>lipat_lima = list(range(5,50,5))
>>>print(lipat_lima)
[5,10,15,20,25,30,35,40,45]

Coba jalankan baris-baris perintah di atas, untuk lebih memahaminya. Bila perlu, ketika memanggil fungsi range() gantilah argumen atau batas-batasnya, sehingga menghasilkan List data yang berbeda.

List Comprehensive

Misalkan kita ingin membuat List numerik berisi nilai pangkat 2, dari angka 1 sampai 10. Maka, kita bisa melakukan pengulangan dari angka 1 sampai 10, dan menggunakan operator exponent (**) untuk memangkatkan nilainya. Perhatikan contoh berikut:

>>>pangkat_dua = []
>>>for number in range(1,11):
>>>    number = number ** 2
>>>    pangkat_dua.append(number)
>>>print(pangkat_dua)
[1,4,9,16,25,36,49,64,81,100]
Dengan metode comprehensive, baris-baris perintah dalam pengulangan for, bisa ditulis mejadi 1 baris saja, ketika mendefiniskan List pangkat_dua. Perhatikan tata cara penulisan List comprehensive di bawah ini.
>>>pangkat_dua = [number**2 for number in range(1,11)]
>>>print(pangkat_dua)
[1,4,9,16,25,36,49,64,81,100]

Dengan menggunakan metode comprehensive seperti contoh di atas, cobalah buat dan tampilkan List berisi nilai pangkat 3, dari bilangan kelipatan 5, mulai dari 5 sampai 55. Jika benar, maka program menampilkan hasil sebagai berikut:

[125, 1000, 3375, 8000, 15625, 27000, 42875, 64000, 91125, 125000]

Membagi dan Menduplikasi List

Seringkali dalam membuat program, kita butuh membuat List baru berdasarkan List yang sudah ada. Untuk itu, kita perlu tahu bagaimana cara mengduplikasi atau meng-copy sebagian, atau seluruh data dari sebuah List. Sebelumnya, kita sudah mengakses data di List satu per satu, dengan menyatakan indeksnya atau menggunakan looping. Sebetulnya, data List dapat diambil diambil sebagian, ataupun secara keseluruhan. Mengambil atau membagi sebagian data List, dikenal dengan istilah slicing. Sedangkan mengambil data List secara keseluruhan, berarti kita menduplikat atau meng-copy List tersebut.

Untuk melakukan slicing sebuah List, kita menspesifikasikan indeks awal dan indeks akhir posisi data pada List yang ingin kita ambil, dalam kurung siku. Perhatikan contoh berikut ini.

>>> foods = ['noodle', 'spaghetti' ,'pizza', 'burger', 'cheesecake', 'soup']
>>> my_favs = foods[0:3]
>>> print(my_favs)
['noodle', 'spaghetti', 'pizza']

>>> foods = ['noodle', 'spaghetti' ,'pizza', 'burger', 'cheesecake', 'soup']
>>> my_favs = foods[3:]
>>> print(my_favs)
['burger', 'cheesecake', 'soup']

>>> foods = ['noodle', 'spaghetti' ,'pizza', 'burger', 'cheesecake', 'soup']
>>> my_favs = foods[:2]
>>> print(my_favs)
['noodle', 'spaghetti']

Pada contoh pertama, data List my_fav diambil dari List foods, yakni data di indeks ke-0, sampai indeks ke-2 (sebelum 3), sehingga menghasilkan daftar noodle, spaghetti, dan pizza. Pada contoh kedua, my_fav diambil dari foods, mulai dari indeks ke-3, sampai indeks terakhir, karena batas atas tidak dinyatakan. Pada contoh ketiga, my_fav diambil dari foods, yakni data dari indeks ke-0 (karena batas bawah tidak dinyatakan), sampai indeks ke-1(sebelum 2). Dari contoh-contoh di atas, menunjukkan bahwa kita bisa mengakses sebagian data List dengan menspesifikasikan indeks bawah dan atas. Cara yang sama juga bisa kita gunakan, jika ingin melakukan looping pada sebagian data dari List. Berikut ini contoh sederhananya.

Slicing
Contoh looping menggunakan slicing

Dengan mengetahui metode slicing, sekarang kita tahu bagaimana menduplikasi seluruh data pada List, yakni dengan mengakses datanya dari indeks ke-0 sampai terakhir. Dengan kata lain, kita kosongkan indeks bawah dan atas pada kurung siku, sehingga Python menganggap kita “meminta” untuk meng-copy keseluruhan data. Berikut contohnya.

>>> my_pets = ['cat', 'fish', 'dog', 'bird']
>>> your_pets= my_pets[:]
>>> print(your_pets)
['cat', 'fish', 'dog', 'bird']

Tuple

Tuple adalah “List” yang datanya tidak dapat diubah perindeks. Kita menggunakan Tuple dalam program, jika sekumpulan data yang disimpan nilainya tidak berubah alias konstan. Mendefinisikan Tuple hampir sama seperti mendefinisikan List. Bedanya terletak pada jenis kurung yang digunakan. Jika List menggunakan kurung siku, maka Tuple menggunakan tanda kurung biasa. Perhatikan contoh berikut ini.

>>> fixed_coordinates = (10,10,15,20)
>>> print(fixed_coordinates[0])
>>> print(fixed_coordinates[2])
10
15

>>> for coordinate in fixed_coordinates:
>>>     print(coordinate)
10
10
15
20

Dari contoh di atas, bisa dilihat bahwa cara mengakses data pada Tuple, sama persis seperti mengakses data pada List. Namun, kita tidak bisa mengganti data Tuple per-indeks, seperti misalnya fixed_coordinates[0] = 20. Jika demikian, interpreter akan menampilkan syntax error. Kalaupun harus mengubah data pada Tuple, entah itu satu data atau lebih, maka yang dapat dilakukan adalah mendefinikan ulang seluruh nilai data pada Tuple tersebut, seperti contoh di bawah ini.

>>> fixed_coordinates = (10,10,15,20)
>>> print(fixed_coordinates)
(10,10,15,20)

>>> fixed_coordinates = (10,10,35,40)
>>> print(fixed_coordinates)
(10,10,35,40)

Perbedaan karakteristik antara List dan Tuple perlu diperhatikan, agar kita tahu, mana tipe data yang cocok digunakan untuk kebutuhan tertentu.


Sejauh ini, kita sudah belajar mengenal tipe-tipe data, bagaimana menyimpan, mengakses, dan menampilkannya secara terurut dan teratur, menggunakan indexing maupun looping. Pada materi berikutnya, kita akan berkenalan dengan conditional statement, yang berperan penting dalam menentukan alur program dan perubahan data.

What do you think? Leave a Comment Below.

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Up ↑

%d bloggers like this: