Penulis memakai editor Visual Studio Code dengan tambahan:
• Extension Python, untuk mendapatkan benefit API doc, autocompletion,
linting, run feature, dan lainnya.
• Extension Jupyter, untuk interactive run program via editor.
A.1. Python Hello World
Bahasa pemrograman Python sangat sederhana dan mudah untuk dipelajari.
Pada chapter ini kita akan langsung mempraktikannya dengan membuat
program hello world.
A.1.1. Program Hello Python
Siapkan sebuah folder dengan isi satu file program Python bernama main.py .
Pada file main.py , tuliskan kode berikut:
Run program memakai command berikut:
print("hello python")
# python <nama_file_program>
python main.py
Selamat, secara official sekarang anda yaitu programmer Python! 🎉 Mudah
bukan!?
A.1.2. Penjelasan program
Folder hello-python bisa disebut dengan folder project, dimana isinya
yaitu file-file program Python berekstensi .py .
File main.py yaitu file program python. Nama file program bisa apa saja,
tapi umumnya pada pemrograman Python, file program utama bernama
main.py .
Command python <nama_file_program> digunakan untuk menjalankan
program. Cukup ganti <nama_file_program> dengan nama file program (yang
pada contoh ini yaitu main.py ) maka kode program di dalam file tersebut
akan di-run oleh Python interpreter.
Statement print("<pesan_text>") yaitu penerapan dari salah satu fungsi
built-in yang ada dalam Python stdlib (standard library), yaitu fungsi bernama
print() yang kegunaannya yaitu untuk menampilkan pesan string (yang
disipkan pada argument pemanggilan fungsi print() ). Pesan tersebut akan
mucnul ke layar output stdout (pada contoh ini yaitu terminal milik editor
penulis).
• Pembahasan detail mengenai fungsi ada di chapter Function
• Pembahasan detail mengenai Python standard library (stdlib) ada di
chapter Python standard library (stdlib)
Untuk sekarang, penulis tidak anjurkan untuk lompat ke pembahasan
tersebut. Silakan ikuti pembelajaran chapter per chapter secara
berurutan.
Catatan chapter 📑📑
â—‰ Source code praktik
github.com/novalagung/dasarpemrogramanpython-example/../hello-
python
â—‰ Referensi
• https://www.learnpython.org/en/Hello,_World!
• https://docs.python.org/3/library/functions.html
A.2. Run Python di
VSCode
Chapter ini membahas tentang pilihan opsi cara run program Python di Visual
Studio Code.
A.2.1. Cara run program Python di
VSCode
â—‰ memakai command python
Command ini sudah kita terapkan pada chapter Program Pertama ➜ Hello
Python, cara penggunaannya cukup mudah, tinggal jalankan saja command di
terminal.
â—‰ memakai tombol run â–¶
Cara run program ini lebih praktis karena tingal klik-klik saja. Di toolbar
VSCode sebelah kanan atas ada tombol â–¶ , gunakan tombol tersebut untuk
menjalankan program.
# python <nama_file_program>
python main.py
â—‰ memakai jupyter code cells
Untuk menerapkan cara ini, tambahkan kode #%% atau # %% pada baris di
atas statement print("hello python") agar blok kode di bawahnya
dianggap sebagai satu code cell .
Setelah itu, muncul tombol Run Cell , klik untuk run program.
Catatan chapter 📑📑
â—‰ Chapter relevan lainnya
• Program Pertama ➜ Hello Python
â—‰ Referensi
• https://code.visualstudio.com/docs/python/python-tutorial
• https://code.visualstudio.com/docs/datascience/jupyter-notebooks
• https://docs.python.org/3/using/cmdline.html
A.3. Python Komentar
Komentar yaitu sebuah statement yang tidak akan dijalankan oleh
interpreter. Biasanya digunakan untuk menambahkan keterangan atau men-
disable statements agar tidak dieksekusi saat run program.
Python mengenal dua jenis komentar, yaitu komentar satu baris dan multi-
baris.
A.3.1. Komentar satu baris
Karakter # digunakan untuk menuliskan komentar, contoh:
Jika di-run, outputnya:
Bisa dilihat statement yang diawali dengan tanda # tidak dieksekusi.
# ini yaitu komentar
print("halo,")
print("selamat pagi!") # ini juga komentar
# println("statement ini tidak akan dipanggil")
A.3.2. Komentar multi-baris
Komentar multi-baris bisa diterapkan melalui dua cara:
â—‰ Komentar memakai # dituliskan
â—‰ Komentar memakai """ atau '''
Karakter """ atau ''' sebenarnya digunakan untuk membuat multiline
string atau string banyak baris. Selain itu, bisa juga dipergunakan sebagai
penanda komentar multi baris. Contoh penerapannya:
Atau bisa juga ditulis seperti ini untuk komentar satu baris:
• Pembahasan detail mengenai string ada di chapter String
• Pembahasan detail mengenai DocString ada di chapter DocString
# ini yaitu komentar
# ini juga komentar
# komentar baris ke-3
"""
ini yaitu komentar
ini juga komentar
komentar baris ke-3
"""
"""ini yaitu komentar"""
Catatan chapter 📑📑
â—‰ Source code praktik
github.com/novalagung/dasarpemrogramanpython-example/../komentar
â—‰ Chapter relevan lainnya
• String
â—‰ Referensi
• https://docs.python-guide.org/writing/documentation/
A.4. Python Variabel
Dalam konsep programming, variabel yaitu suatu nama yang dikenali
komputer sebagai penampung nilai/data yang disimpan di memory. Sebagai
contoh nilai 3.14 disimpan di variabel bernama PI .
Pada chapter ini kita akan belajar tentang penerapan variabel di Python.
A.4.1. Deklarasi variabel
Agar dikenali oleh komputer, variabel harus dideklarasikan. Deklarasi variabel
di Python cukup sederhana, caranya tinggal tulis saja nama variabel kemudian
diikuti operator assignment beserta nilai awal yang ingin dimasukan ke
variabel tersebut. Contoh:
Karakter = yaitu operator assignment, digunakan untuk operasi
penugasan. Nilai yang ada di sebelah kanan = ditugaskan untuk ditampung
oleh variabel yang berada di sebelah kiri = . Contoh pada statement nama =
"noval" , nilai "nama" ditugaskan untuk ditampung oleh variabel nama .
Nilai string bisa dituliskan dengan memakai literal " ataupun '
Ok. Selanjutnya, coba kita munculkan nilai ke-empat variabel di atas ke layar
memakai fungsi print() . Caranya:
nama = "noval"
hobi = 'makan'
umur = 18
laki = True
Penjelasan mengenai program di atas bisa dilihat di bawah ini:
â—‰ String formatting print
Di program yang sudah ditulis, ada statement berikut:
Statement tersebut yaitu contoh cara memunculkan string ke layar output
( stdout ):
Lalu di bawahnya ada statement ini, yang merupakan contoh penerapan teknik
string formatting atau output formatting untuk mem-format string ke layar
output:
Karakter %s disitu akan di-replace dengan nilai variabel nama sebelum
dimunculkan. Dan %s disini menandakan bahwa data yang akan me-replace-
nya bertipe data string .
print("==== biodata ====")
print("nama: %s" % (nama))
print("hobi: %s, umur: %d, laki: %r" % (hobi, umur, laki))
print("==== biodata ====")
print("nama: %s" % (nama))
# output ➜ "nama: noval"
Selain %s , ada juga %d untuk data bertipe numerik integer, dan %r untuk
data bertipe bool . Contoh penerapannya bisa dilihat pada statement ke-3
program yang sudah di tulis.
Pembahasan detail mengenai string formatting ada di chapter String ➜
formatting
A.4.2. Naming convention variabel
Mengacu ke dokumentasi PEP 8 – Style Guide for Python Code, nama variabel
dianjurkan untuk ditulis memakai snake_case .
A.4.3. Operasi assignment
Di pemrograman Python, deklarasi variabel yaitu pasti operasi assignment.
Variabel dideklarasikan dengan ditentukan langsung nilai awalnya.
print("hobi: %s, umur: %d, laki: %r" % (hobi, umur, laki))
# output ➜ "hobi: makan, umur: 18, laki: True"
pesan = 'halo, selamat pagi'
nilai_ujian = 99.2
nama = "noval"
umur = 18
nama = "noval agung"
umur = 21
A.4.4. Deklarasi variabel beserta tipe
data
Tipe data variabel bisa ditentukan secara eksplisit, penulisannya bisa dilihat
pada kode berikut:
Pembahasan detail mengenai tipe data ada di chapter Tipe Data
A.4.5. Deklarasi banyak variabel sebaris
Contoh penulisan deklarasi banyak variabel dalam satu baris bisa dilihat pada
kode berikut:
Karakter %f digunakan untuk mem-format nilai float
Output program di atas:
nama: str = "noval"
hobi: str = 'makan'
umur: int = 18
laki: bool = True
nilai_ujian: float = 99.2
nilai1, nilai2, nilai3, nilai4 = 24, 25, 26, 21
nilai_rata_rata = (nilai1 + nilai2 + nilai3 + nilai4) / 4
print("rata-rata nilai: %f" % (nilai_rata_rata))
Catatan chapter 📑📑
â—‰ Source code praktik
github.com/novalagung/dasarpemrogramanpython-example/../variables
â—‰ Chapter relevan lainnya
• Tipe Data
• String
• Number
â—‰ Referensi
• https://www.w3schools.com/python/python_datatypes.asp
• https://peps.python.org/pep-0008/
• https://en.wikipedia.org/wiki/Snake_case
• https://www.learnpython.org/en/String_Formatting
A.5. Python Konstanta
Konstanta (atau nilai konstan) yaitu sebuah variabel yang nilainya
dideklarasikan di awal dan tidak bisa diubah setelahnya.
Pada chapter ini kita akan mempelajari tentang penerapan Konstanta di
Python.
A.5.1. Konstanta di Python
Deklarasi konstanta di Python dilakukan memakai bantuan tipe class
bernama typing.Final .
Untuk memakai nya, typing.Final perlu di-import terlebih dahulu
memakai keyword from dan import .
â—‰ Module import
Keyword import digunakan untuk meng-import sesuatu, sedangkan keyword
from digunakan untuk menentukan dari module mana sesuatu tersebut akan
from typing import Final
PI: Final = 3.14
print("pi: %f" % (PI))
di-import.
Pembahasan detail mengenai import dan from ada di chapter
Modules
Statement from typing import Final artinya yaitu meng-import tipe
Final dari module typing yang dimana module ini merupakan bagian dari
Python standard library (stdlib).
Pembahasan detail mengenai Python standard library (stdlib) ada di
chapter Python standard library (stdlib)
A.5.2. Tipe class typing.Final
Tipe Final digunakan untuk menandai suatu variabel yaitu tidak bisa
diubah nilainya (konstanta). Cara penerapan Final bisa dengan dituliskan
tipe data konstanta-nya secara eksplisit, atau boleh tidak ditentukan (tipe akan
diidentifikasi oleh interpreter berdasarkan tipe data nilainya).
Pembahasan detail mengenai tipe data ada di chapter Tipe Data
# tipe konstanta PI tidak ditentukan secara explisit,
# melainkan didapat dari tipe data nilai
PI: Final = 3.14
# tipe konstanta TOTAL_MONTH ditentukan secara explisit yaitu `int`
TOTAL_MONTH: Final[int] = 12
A.5.3. Naming convention konstanta
Mengacu ke dokumentasi PEP 8 – Style Guide for Python Code, nama konstanta
harus dituliskan dalam huruf besar (UPPER_CASE).
Catatan chapter 📑📑
â—‰ Source code praktik
github.com/novalagung/dasarpemrogramanpython-example/../konstanta
â—‰ Chapter relevan lainnya
• Variabel
• Tipe Data
• Modules
• Python standard library (stdlib)
â—‰ Referensi
• https://docs.python.org/3/library/typing.html#typing.Final
• https://peps.python.org/pep-0008/
A.6. Python Tipe Data
Python mengenal cukup banyak tipe data, mulai dari yang built-in (atau
bawaan) maupun custom type. Pada chapter ini kita akan mempelajari high-
level overview tipe-tipe tersebut.
A.6.1. Tipe data numerik
Ada setidaknya 3 tipe data numerik di Python, yaitu:
Tipe
data Keterangan Contoh
int menampung bilangan bulat atauinteger number_1 = 10000024
float menampung bilangan desimal ataufloating point number_2 = 3.14
complex menampung nilai berisi kombinasibilangan real dan imajiner number_3 = 120+3j
Penjelasan detail mengenai string ada pada chapter Number
A.6.2. Tipe data string / str
Tipe string direpresentasikan oleh str , pembuatannya bisa memakai
literal string yang ditandai dengan tanda awalan dan akhiran tanda " atau
' .
• memakai tanda petik dua ( " )
• memakai tanda petik satu ( ' )
Jika ada baris baru (atau newline) di bagian awal penulisan ''' atau """
maka baris baru tersebut merupakan bagian dari string. Jika ingin
meng-exclude-nya bisa memakai """\ atau '''\ . Contoh:
# string sebaris
string_1 = "hello python"
# string multi-baris
string_2 = """Selamat
Belajar
Python"""
# string sebaris
string_3 = 'for the horde!'
# string multi-baris
string_4 = '''
Sesuk
Preiiii
'''
string_5 = '''\
Sesuk
Preiiii
'''
Penjelasan detail mengenai string ada pada chapter String
A.6.3. Tipe data bool
Literal untuk tipe data boolean di Python yaitu True untuk nilai benar, dan
False untuk nilai salah.
A.6.4. Tipe data None
Tipe data None merepresentasikan nilai kosong (seperti nilai null atau nil
di bahasa lain). Pengecekan nilai kosong digunakan
Penjelasan lebih detail mengenai None ada pada chapter None
bool_1 = True
bool_2 = False
data = "hello"
print(data)
# output ➜ hello
data = None
print(data)
# output ➜ data
data = "python"
print(data)
# output ➜ python
A.6.5. Tipe data list
List yaitu tipe data di Python untuk menampung nilai kolektif yang disimpan
secara urut, dengan isi bisa berupa banyak varian tipe data (tidak harus
sejenis). Cara penerapan list yaitu dengan menuliskan nilai kolektif dengan
pembatas , dan diapit tanda [ dan ] .
Pengaksesan element list memakai notasi list[index_number] . Contoh:
Penjelasan detail mengenai list ada pada chapter List
A.6.6. Tipe data tuple
Tuple yaitu tipe data kolektif yang mirip dengan list, dengan pembeda
yaitu :
# list with int as element's data type
list_1 = [2, 4, 8, 16]
# list with str as element's data type
list_2 = ["grayson", "jason", "tim", "damian"]
# list with various data type in the element
list_3 = [24, False, "Hello Python"]
list_1 = [2, 4, 8, 16]
print(list_1[2])
# output ➜ 8
• Nilai pada data list yaitu bisa diubah (mutable), sedangkan nilai data
tuple tidak bisa diubah (immutable).
• List memakai tanda [ dan ] untuk penulisan literal, sedangkan
pada tuple yang digunakan yaitu tanda ( dan ) .
Pengaksesan element tuple memakai notasi tuple[index_number] .
Contoh:
Penjelasan detail mengenai tuple ada pada chapter Tuple
A.6.7. Tipe data dictionary
Tipe data dict atau dictionary berguna untuk menyimpan data kolektif
terstruktur berbentuk key value. Contoh penerapan:
# tuple with int as element's data type
tuple_1 = (2, 3, 4)
# tuple with str as element's data type
tuple_2 = ("numenor", "valinor")
# tuple with various data type in the element
tuple_3 = (24, False, "Hello Python")
tuple_1 = (2, 3, 4)
print(tuple_1[2])
# output ➜ 4
profile_1 = {
"name": "Noval",
Pengaksesan property dictionary memakai notasi dict[property_name] .
Contoh:
Penulisan data dictionary diperbolehkan secara horizontal, contohnya seperti
berikut:
Penjelasan detail mengenai dictionary ada pada chapter Dictionary
A.6.8. Tipe data set
Tipe data set yaitu cara lain untuk menyimpan data kolektif. Tipe data ini
memiliki beberapa kelemahan:
• Tidak bisa menyimpan informasi urutan data
• Elemen data yang sudah dideklarasikan tidak bisa diubah nilainya (tapi
bisa dihapus)
• Tidak bisa diakses memakai index (tetapi bisa memakai
perulangan)
Contoh penerapan set:
print("name: %s" % (profile_1["name"]))
# output ➜ name: Noval
print("hobbies: %s" % (profile_1["hobbies"]))
# output ➜ name: ["gaming", "learning"]
profile_1 = { "name": "Noval", "hobbies": ["gaming", "learning"] }
Penjelasan detail mengenai set ada pada chapter Set
A.6.9. Tipe data lainnya
Selain tipe-tipe di atas ada juga beberapa tipe data lainnya, seperti frozenset,
bytes, memoryview, range; yang kesemuanya akan dibahas satu per satu di
chapter terpisah.
• Penjelasan detail mengenai frozenset ada pada chapter Set ➜
frozenset
• Penjelasan detail mengenai range ada pada chapter Perulangan ➜
for & range
Catatan chapter 📑📑
â—‰ Source code praktik
github.com/novalagung/dasarpemrogramanpython-example/../tipe-data
â—‰ Chapter relevan lainnya
• String
set_1 = {"pineapple", "spaghetti"}
print(set_1)
# output ➜ {"pineapple", "spaghetti"}
• List
• Tuple
• Set
• Dictionary
â—‰ Referensi
• https://docs.python.org/3/tutorial/introduction.html
• https://docs.python.org/3/library/stdtypes.html#typesseq
A.7. Python Operator
Operator yaitu suatu karakter yang memiliki kegunaan khusus contohnya
seperti + untuk operasi aritmatika tambah, dan and untuk operasi logika
AND.
Pada chapter ini kita akan mempelajari macam-macam operator yang ada di
Python.
A.7.1. Operator aritmatika
Operator Keterangan Contoh
+ operasi tambah num = 2 + 2 ➜ hasilnyanum nilainya 4
unary + penanda nilai positif num = +2 ➜ hasilnya numnilainya 2
- operasi pengurangan num = 3 - 2 ➜ hasilnyanum nilainya 1
unary - penanda nilai negatif num = -2 ➜ hasilnya numnilainya -2
* operasi perkalian num = 3 * 3 ➜ hasilnyanum nilainya 9
Operator Keterangan Contoh
/ operasi pembagian num = 8 / 2 ➜ hasilnyanum nilainya 4
// operasi bagi dengan hasildibulatkan ke bawah
num = 10 // 3 ➜ hasilnya
num nilainya 3
% operasi modulo (pencariansisa hasil bagi)
num = 7 % 4 ➜ hasilnya
num nilainya 3
** operasi pangkat num = 3 ** 2 ➜ hasilnyanum nilainya 9
A.7.2. Operator assignment
Operator assignment yaitu = , digunakan untuk operasi assignment
(penugasan nilai atau penentuan nilai), sekaligus untuk deklarasi variabel jika
variabel tersebut sebelumnya belum terdeklarasi. Contoh:
# deklarasi variabel num_1
num_1 = 12
# deklarasi variabel num_2
num_2 = 24
# nilai baru ditugaskan ke variabel num_2
num_2 = 12
# deklarasi variabel num_3 dengan isi nilai hasil operasi aritmatika
`num_1 + num_2`
A.7.3. Operator perbandingan
Operator perbandingan pasti menghasilkan nilai kebenaran bool dengan
kemungkinannya hanya dua nilai, yaitu benar ( True ) atau salah ( False ).
Python mengenal operasi perbandingan standar yang umumnya juga dipakai
di bahasa lain.
Operator Keterangan Contoh
== apakah kiri sama dengankanan
res = 4 == 5 ➜ hasilnya
res nilainya False
!= apakah kiri tidak samadengan kanan
res = 4 != 5 ➜ hasilnya
res nilainya True
> apakah kiri lebih besardibanding kanan
res = 4 > 5 ➜ hasilnya
res nilainya False
< apakah kiri lebih kecildibanding kanan
res = 4 < 5 ➜ hasilnya
res nilainya True
>= apakah kiri lebih besar atausama dengan kanan
res = 5 >= 5 ➜ hasilnya
res nilainya True
<= apakah kiri lebih kecil atausama dengan kanan
res = 4 <= 5 ➜ hasilnya
res nilainya False
A.7.4. Operator logika
Operator Keterangan Contoh
and operasi logika AND res = (4 == 5) and (2 != 3) âžœhasilnya res nilainya False
or operasi logika OR res = (4 == 5) or (2 != 3) âžœhasilnya res nilainya True
not
atau !
operasi logika
negasi (atau NOT)
res = not (2 == 3) ➜ hasilnya res
nilainya True
res = !(2 == 3) ➜ hasilnya res
nilainya True
A.7.5. Operator bitwise
Operator Keterangan Contoh
& operasi bitwise AND x & y = 0 (0000 0000)
| operasi bitwise OR x | y = 14 (0000 1110)
~ operasi bitwise NOT ~x = -11 (1111 0101)
^ operasi bitwise XOR x ^ y = 14 (0000 1110)
Operator Keterangan Contoh
>> operasi bitwise right shift x >> 2 = 2 (0000 0010)
<< operasi bitwise left shift x << 2 = 40 (0010 1000)
A.7.6. Operator identity ( is )
Operator is memiliki kemiripan dengan operator logika == , perbedaannya
pada operator is yang dibandingkan bukan nilai, melainkan identitas atau ID-
nya.
Bisa saja ada 2 variabel bernilai sama tapi identitasnya berbeda. Contoh:
Di Python ada special case yang perlu kita ketahui perihal penerapan
operator is untuk operasi perbandingan identitas khusus tipe data
numerik. Pembahasan detailnya ada di chapter Object ID & Reference.
num_1 = 100001
num_2 = 100001
res = num_1 is num_2
print("num_1 is num_2 =", res)
print("id(num_1): %s, id(num_2): %s" % (id(num_1), id(num_2)))
INFO
Pengecekan nilai kosong (atau None ) dianjurkan untuk selalu dilakukan
memakai operator is , dan menghindari penggunaan operator == .
Hal ini karena operator is membandingkan identitas data dan identitas
data None selalu valid. Sedangkan operator == perbandingannya
dilakukan dengan via special method __eq__() yang default method
tersebut bisa di-override isinya.
Lebih jelasnya penggunaan operator is terhadap None di bahas
di chapter None
â—‰ Fungsi print() tanpa string formatting
Statement print("num_1 is not num_2 =", res) yaitu salah satu cara
untuk printing data tanpa memakai string formatting (seperti %s ).
Yang terjadi pada statement tersebut yaitu , semua nilai argument
pemanggilan fungsi print() akan digabung dengan delimiter karakter spasi (
) kemudian ditampilkan ke layar console.
Agar lebih jelas, silakan perhatikan statement berikut, keduanya yaitu
menghasilkan output yang sama.
print("message: %s %s %s" % ("hello", "python", "learner"))
print("message:", "hello", "python", "learner")
â—‰ Fungsi id()
Digunakan untuk mengambil nilai identitas atau ID suatu data. Contoh
penerapannya sangat mudah, cukup panggil fungsi id() kemudian tulis data
yang ingin diambil ID-nya sebagai argument pemanggilan fungsi tersebut.
Nilai kembalian fungsi id() bertipe numerik.
Pembahasan detail mengenai fungsi id() ada di chapter Object ID &
Reference
A.7.7. Operator membership ( in )
Operator in digunakan untuk mengecek apakah suatu nilai merupakan
bagian dari data kolektif atau tidak.
Operator ini bisa dipergunakan pada semua tipe data kolektif seperti
data_1 = "hello world"
id_data_1 = id(data_1)
print("data_1:", data_1)
# output ➜ data_1: hello world
print("id_data_1:", id_data_1)
# output ➜ id_data_1: 19441xxxxxxxx
dictionary, set, tuple, dan list. Selain itu, operator in juga bisa digunakan
pada string untuk pengecekan substring
Operator in jika diterapkan pada tipe dictionary, yang di-check yaitu
key-nya bukan value-nya.
sample_list = [2, 3, 4]
is_3_exists = 3 in sample_list
print(is_3_exists)
# output ➜ True
sample_tuple = ("hello", "python")
is_hello_exists = "hello" in sample_tuple
print(is_hello_exists)
# output ➜ True
sample_dict = { "nama": "noval", "age": 12 }
is_key_nama_exists = "nama" in sample_dict
print(is_key_nama_exists)
# output ➜ True
sample_set = { "sesuk", "preiiii" }
is_prei = "preiiii" in sample_set
print(is_prei)
# output ➜ True
text = 'Hello world'
is_substring_exists = 'orl' in text
print(is_substring_exists)
# output ➜ True
Catatan chapter 📑📑
â—‰ Source code praktik
github.com/novalagung/dasarpemrogramanpython-example/../operator
â—‰ Chapter relevan lainnya
• Variabel
• Tipe Data
• String ➜ formatting
â—‰ TBA
• Operator @ for matrix multiplication
â—‰ Referensi
• https://realpython.com/python-operators-expressions/
• https://www.programiz.com/python-programming/operators
• https://stackoverflow.com/a/15172182/1467988
A.8. Seleksi kondisi
Python ➜ if, elif, else
Seleksi kondisi yaitu suatu blok kode yang dieksekusi hanya ketika kriteria
yang ditentukan terpenuhi. Teknik seleksi kondisi banyak digunakan untuk
kontrol alur program.
Python mengenal beberapa keyword seleksi kondisi, dan pada chapter ini akan
kita pelajari.
A.8.1. Keyword if
if yaitu keyword seleksi kondisi di Python. Cara penerapan keyword ini
sangat mudah, cukup tulis saja if diikuti dengan kondisi berupa nilai bool
atau statement operasi logika, lalu dibawahnya ditulis blok kode yang ingin
dieksekusi ketika kondisi tersebut terpenuhi. Contoh:
grade = 100
if grade == 100:
print("perfect")
if grade == 90:
print("ok")
print("keep working hard!")
Bisa dilihat di output, hanya pesan perfect yang muncul karena kondisi
grade == 100 yaitu yang terpenuhi. Sedangkan statement print("ok")
tidak tereksekusi karena nilai variabel grade bukanlah 90 .
â—‰ Block indentation
Di python, suatu blok kondisi ditandai dengan indentation atau spasi, yang
menjadikan kode semakin menjorok ke kanan.
Sebagai contoh, 2 blok kode print berikut merupakan isi dari seleksi kondisi
if grade == 90 .
Sesuai aturan PEP 8 – Style Guide for Python Code, indentation di Python
memakai 4 karakter spasi dan bukan karakter tab.
A.8.2. Keyword elif
elif (kependekan dari else if) digunakan untuk menambahkan blok seleksi
kondisi baru, untuk mengantisipasi blok if yang tidak terpenuhi.
Dalam penerapannya, suatu blok seleksi kondisi harus diawali dengan if .
Keyword elif hanya bisa dipergunakan pada kondisi setelahnya yang masih
satu rantai (masih satu chain). Contoh:
if grade == 90:
print("ok")
print("keep working hard!")
str_input = input('Enter your grade: ')
Jalankan program di atas, kemudian inputkan suatu nilai numerik lalu tekan
enter.
Kode di atas menghasilkan:
• Ketika nilai inputan yaitu 86 , muncul pesan awesome karena blok
seleksi kondisi yang terpenuhi yaitu elif grade >= 85 .
• Ketika nilai inputan yaitu 100 , muncul pesan perfect karena blok
seleksi kondisi yang terpenuhi yaitu grade == 100 .
• Ketika nilai inputan yaitu 40 , tidak muncul pesan karena semua blok
seleksi kondisi tidak terpenuhi.
â—‰ Fungsi input()
Fungsi input digunakan untuk menampilkan suatu pesan text (yang disisipkan
saat fungsi dipanggil) dan mengembalikan nilai inputan user dalam bentuk
string.
Agar makin jelas, silakan praktikan kode berikut:
str_input = input('Enter your grade: ')
print("inputan user:", str_input, type(str_input))
Kode di atas menghasilkan:
1. Text Enter your grade : muncul, kemudian kursor akan berhenti disitu.
2. User perlu menuliskan sesuatu kemudian menekan tombol enter agar
eksekusi program berlanjut.
3. Inputan dari user kemudian menjadi nilai balik fungsi input() (yang pada
contoh di atas ditampung oleh variabel input_str ).
4. Nilai inputan user di print memakai statement print("inputan
user:", str_input) .
â—‰ Fungsi type()
Fungsi type() digunakan untuk melihat informasi tipe data dari suatu nilai
atau variabel. Fungsi ini mengembalikan string dalam format <class
'tipe_data'> .
â—‰ Type conversion / konversi tipe data
Konversi tipe data string ke int dilakukan memakai fungsi int() .
Dengan memakai fungsi tersebut, data string yang disisipkan pada
parameter, tipe datanya berubah menjadi int .
Sebagai contoh, bisa dilihat pada program berikut ini, hasil statement
type(grade) yaitu <class 'int'> yang menunjukan bahwa tipe datanya
yaitu int .
Pembahasan detail mengenai type conversion ada di chapter Konversi
Tipe Data
A.8.3. Keyword else
else digunakan sebagai blok seleksi kondisi penutup ketika blok if dan/
atau elif dalam satu chain tidak ada yang terpenuhi. Contoh:
str_input = input('Enter your grade: ')
grade = int(str_input)
print("inputan user:", grade, type(grade))
str_input = input('Enter your grade: ')
grade = int(str_input)
if grade == 100:
print("perfect")
elif grade >= 85:
print("awesome")
elif grade >= 65:
print("passed the exam")
else:
print("below the passing grade")
A.8.4. Seleksi kondisi bercabang / nested
Seleksi kondisi bisa saja berada di dalam suatu blok seleksi kondisi. Teknik ini
biasa disebut dengan seleksi kondisi bercabang atau bersarang.
Di Python, cara penerapannya cukup dengan menuliskan blok seleksi kondisi
tersebut. Gunakan indentation yang lebih ke kanan untuk seleksi kondisi
terdalam.
str_input = input('Enter your grade: ')
grade = int(str_input)
if grade == 100:
print("perfect")
elif grade >= 85:
print("awesome")
elif grade >= 65:
print("passed the exam")
if grade <= 70:
print("but you need to improve it!")
else:
print("with ok grade")
else:
print("below the passing grade")
Pada kode di atas, pada seleksi kondisi terluar, di bawah blok if dan
elif sengaja penulis tulis di baris baru agar lebih mudah untuk dibaca.
Hal seperti ini diperbolehkan.
A.8.5. Seleksi kondisi dengan operasi
logika
Keyword and , or , dan not bisa digunakan dalam seleksi kondisi.
Contohnya:
grade = int(input('Enter your current grade: '))
prev_grade = int(input('Enter your previous grade: '))
if grade >= 90 and prev_grade >= 65:
print("awesome")
if grade >= 90 and prev_grade < 65:
print("awesome. you definitely working hard, right?")
elif grade >= 65:
print("passed the exam")
else:
print("below the passing grade")
if (grade >= 65 and not prev_grade >= 65) or (not grade >= 65 and
prev_grade >= 65):
print("at least you passed one exam. good job!")
A.8.6. Seleksi kondisi sebaris & ternary
Silakan perhatikan kode sederhana berikut, isinya yaitu seleksi kondisi
sederhana pengecekan nilai grade >= 65 atau tidak.
Kode di atas bisa dituliskan dalam bentuk alternatif penulisan kode lainnya:
â—‰ One-line / sebaris
Metode penulisan sebaris ini cocok diterapkan pada situasi dimana seleksi
kondisi hanya memiliki 1 kondisi saja.
â—‰ Ternary
Metode penulisan ternary umum diterapkan pada blok kode seleksi kondisi
yang memiliki 2 kondisi ( True dan False ).
if grade >= 65:
print("passed the exam")
else:
print("below the passing grade")
if grade >= 65: print("passed the exam")
if grade < 65: print("below the passing grade")
print("passed the exam") if grade >= 65 else print("below the passing
grade")
â—‰ Ternary dengan nilai balik
Metode penulisan ini sebenarnya yaitu sama seperti penerapan ternary
sebelumnya, perbedaannya: pada metode ini setiap kondisi menghasilkan nilai
balik yang umumnya ditampung oleh variabel. Pada contoh di atas, nilai balik
ditampung variabel message .
A.8.7. Pattern matching
Selain keyword if , Python menyediakan keyword lain yaitu match dan
case yang kegunaannya yaitu untuk pattern matching. Pattern matching
sendiri merupakan teknik seleksi kondisi yang cukup advance, mendukung
banyak variasi pencocokan pola.
Lebih detailnya mengenai pattern matching ada di chapter Pattern Matching ➜
match
Catatan chapter 📑📑
â—‰ Source code praktik
github.com/novalagung/dasarpemrogramanpython-example/../if-elif-
else
message = "passed the exam" if grade >= 65 else "below the passing grade"
print(message)
â—‰ Referensi
• https://docs.python.org/3/tutorial/controlflow.html
A.9. Perulangan Python ➜
for & range
Perulangan atau loop merupakan teknik untuk mengulang-ulang eksekusi suatu blok
kode, atau mengiterasi elemen milik tipe data kolektif (contohnya: list). Chapter ini
membahas tentang penerapannya di Python.
A.9.1. Keyword for dan fungsi range()
Perulangan di Python bisa dibuat memakai kombinasi keyword for dan fungsi
range() .
• Keyword for yaitu keyword untuk perulangan, dalam penerapannya diikuti
dengan keyword in .
• Fungsi range() digunakan untuk membuat object range, yang umumnya
dipakai sebagai kontrol perulangan.
Agar lebih jelas, silakan perhatikan dan test kode berikut:
for i in range(5):
print("index:", i)
Penjelasan:
• Statement print("index:", i) muncul 5 kali, karena perulangan dilakukan
dengan kontrol range(5) dimana statement tersebut menghasilkan object
range dengan isi deret angka sejumlah 5 dimulai dari angka 0 hingga 4 .
• Statement for i in range(5): yaitu contoh penulisan perulangan
memakai for dan range() . Variabel i berisi nilai counter setiap iterasi,
yang pada konteks ini yaitu angka 0 hingga 4 .
• Statement print("index:", i) wajib ditulis menjorok ke kanan karena
merupakan isi dari blok perulangan for i in range(5): .
â—‰ Fungsi list()
Fungsi range() menghasilkan object sequence, yaitu jenis data yang strukturnya
mirip seperti list (tapi bukan list) yang kegunaan utamanya yaitu untuk kontrol
perulangan.
Object sequence bisa dikonversi bentuk list dengan cara dibungkus memakai
fungsi list() .
r = range(5)
print("r:", list(r))
• Pembahasan detail mengenai list ada di chapter List
• Pembahasan detail mengenai type conversion ada di chapter Konversi Tipe
Data
A.9.2. Penerapan fungsi range()
Statement range(n) menghasilkan data range sejumlah n yang isinya dimulai dari
angka 0 . Syntax range(n) yaitu bentuk paling sederhana penerapan fungsi ini.
Selain range(n) ada juga beberapa cara penulisan lainnya:
• memakai range(start, stop) . Hasilnya data range dimulai dari start
dan hingga stop - 1 . Sebagai contoh, range(1, 4) menghasilkan data range
[1, 2, 3] .
• memakai range(start, stop, step) . Hasilnya data range dimulai dari
start dan hingga stop - 1 , dengan nilai increment sejumlah step . Sebagai
contoh, range(1, 10, 3) menghasilkan data range [1, 4, 7] .
Agar lebih jelas, silakan perhatikan kode berikut. Ke-3 perulangan ini ekuivalen,
menghasilkan output yang sama.
for i in range(3): for i in range(0, 3): for i in
Tambahan contoh penerapan for dan range() :
A.9.3. Iterasi element data kolektif
Perulangan memakai for bisa dilakukan pada beberapa jenis tipe data (seperti
list, string, tuple, dan lainnya) caranya dengan langsung menuliskan saja variabel
atau data tersebut pada statement for .
for i in range(2, 10, 2):
print("index:", i)
for i in range(5, -5, -1):
print("index:", i)
Tipe data yang bisa digunakan pada keyword for bisasa disebut dengan tipe
iterator. Lebih detailnya dibahas pada chapter Iterator.
Contoh penerapannya bisa dilihat di bawah ini:
â—‰ Iterasi data list
â—‰ Iterasi data tuple
â—‰ Iterasi data string
Penggunaan keyword for pada tipe data string akan mengiterasi setiap karakter
yang ada di string.
messages = ["morning", "afternoon", "evening"]
for m in messages:
print(m)
numbers = ("twenty four", 24)
for n in numbers:
print(n)
â—‰ Iterasi data dictionary
Penggunaan keyword for pada tipe data dict (atau dictionary) akan mengiterasi
key-nya. Dari key tersebut value bisa diambil dengan mudah memakai notasi
dict[key] .
for char in "hello python":
print(char)
bio = {
"name": "toyota camry",
"year": 1993,
}
for key in bio:
print("key:", key, "value:", bio[key])
â—‰ Iterasi data set
A.9.4. Perulangan bercabang / nested for
Cara penerapan nested loop yaitu cukup dengan menuliskan statement for
sebagai isi dari statement for atasnya. Contoh:
numbers = {"twenty four", 24}
for n in numbers:
print(n)
max = int(input("jumlah bintang: "))
for i in range(max):
for j in range(0, max - i):
print("*", end=" ")
print()
â—‰ Parameter opsional end pada fungsi print()
Fungsi print() memiliki parameter opsional bernama end , kegunaannya untuk
mengubah karakter akhir yang muncul setelah data string di-print. Default nilai
paramter end ini yaitu \n atau karakter baris baru, itulah kenapa setiap selesai
print pasti ada baris baru.
Statement print("*", end=" ") akan menghasilkan pesan * yang di-akhiri
dengan karakter spasi karena nilai parameter end di-set dengan nilai karakter spasi
(atau ).
Pembahasan detail mengenai fungsi dan parameter opsional ada di chapter
berikut:
• Function
• Function ➜ Positional, Optional, Keyword Arguments
â—‰ Fungsi print() tanpa parameter
Pemanggilan fungsi print() argument/parameter menghasilkan baris baru.
Catatan chapter 📑📑
â—‰ Source code praktik
github.com/novalagung/dasarpemrogramanpython-example/../for-range
â—‰ Chapter relevan lainnya
• List
• String
• Function
â—‰ Referensi
• https://docs.python.org/3/library/functions.html#func-range
• https://docs.python.org/3/library/functions.html#print
• https://python-reference.readthedocs.io/en/latest/docs/functions/range.html
A.10. Perulangan Python
➜ while
Di Python, selain keyword for ada juga keyword while yang fungsinya
kurang lebih sama yaitu untuk perulangan. Bedanya, perulangan
memakai while terkontrol via operasi logika atau nilai bool .
Pada chapter ini kita akan mempelajari cara penerapannya.
A.10.1. Keyword while
Cara penerapan perulangan ini yaitu dengan menuliskan keyword while
kemudian diikuti dengan nilai bool atau operasi logika. Contoh:
should_continue = True
while should_continue:
n = int(input("enter an even number greater than 0: "))
if n <= 0 or n % 2 == 1:
print(n, "is not an even number greater than 0")
should_continue = False
else:
print("number:", n)
Program di atas memunculkan prompt inputan enter an even number
greater than 0: yang dimana akan terus muncul selama user tidak
menginputkan angka ganjil atau angka dibawah sama dengan 0 .
Contoh lain penerapan while dengan kontrol yaitu operasi logika:
n = int(input("enter max data: "))
i = 0
while i < n:
print("number", i)
i += 1
â—‰ Operasi increment dan decrement
Python tidak mengenal operator unary ++ dan -- . Solusi untuk melakukan
operasi increment maupun decrement bisa memakai cara berikut:
Operasi Cara 1 Cara 2
Increment i += 1 i = i + 1
Decrement i -= 1 i = i - 1
A.10.2. Perulangan while vs for
Operasi while cocok digunakan untuk perulangan yang dimana kontrolnya
yaitu operasi logika atau nilai boolean yang tidak ada kaitannya dengan
sequence.
Pada program yang sudah di tulis di atas, perulangan akan menjadi lebih
ringkas dengan pengaplikasian keyword for , silakan lihat perbandingannya di
bawah ini:
• Dengan keyword while :
n = int(input("enter max data: "))
i = 0
while i < n:
print("number", i)
i += 1
• Dengan keyword for :
Sedangkan keyword for lebih pas digunakan pada perulangan yang
kontrolnya yaitu data sequence, contohnya seperti range dan list.
A.10.3. Perulangan bercabang / nestedwhile
Contoh perulangan bercabang bisa dilihat pada kode program berikut ini.
Caranya cukup tulis saja keyword while di dalam block kode while .
n = int(input("enter max data: "))
for i in range(n):
print("number", i)
n = int(input("enter max data: "))
i = 0
while i < n:
j = 0
while j < n - i:
print("*", end=" ")
j += 1
print()
i += 1
A.10.4. Kombinasi while dan for
Kedua keyword perulangan yang sudah dipelajari, yaitu for dan while bisa
dikombinasikan untuk membuat suatu nested loop atau perulangan bercabang.
Pada contoh berikut, kode program di atas diubah memakai kombinasi
keyword for dan while .
n = int(input("enter max data: "))
i = 0
for i in range(n):
j = 0
while j < n - i:
print("*", end=" ")
j += 1
print()
Catatan chapter 📑📑
â—‰ Source code praktik
github.com/novalagung/dasarpemrogramanpython-example/../while
â—‰ Referensi
• https://docs.python.org/3/tutorial/controlflow.html
A.11. Perulangan Python
➜ break, continue
Keyword break dan continue sering dipergunakan dalam perulangan untuk
alterasi flow secara paksa, seperti memberhentikan perulangan atau memaksa
perulangan untuk lanjut ke iterasi berikutnya.
Pada chapter ini kita akan mempelajarinya.
A.11.1. Keyword break
Pengaplikasian break biasanya dikombinasikan dengan seleksi kondisi.
Sebagai contoh program sederhana berikut, yaitu program dengan spesifikasi:
• Berisi perulangan yang sifatnya berjalan terus-menerus tanpa henti
(karena memakai nilai True sebagai kontrol).
• Perulangan hanya berhenti jika nilai n (yang didapat dari inputan user)
yaitu tidak bisa dibagi dengan angka 3 .
while True:
n = int(input("enter a number divisible by 3: "))
if n % 3 != 0:
break
print("%d is divisible by 3" % (n))
A.11.2. Keyword continue
Keyword continue digunakan untuk memaksa perulangan lanjut ke iterasi
berikutnya (seperti proses skip).
Contoh penerapannya bisa dilihat pada program berikut, yang spesifikasinya:
• Program berisi perulangan dengan kontrol yaitu data range sebanyak 10
(dimana isinya yaitu angka numerik 0 hingga 9 ).
• Ketika nilai variabel counter i yaitu dibawah 3 atau di atas 7 maka
iterasi di-skip.
Efek dari continue yaitu semua statement setelahnya akan di-skip. Pada
program di atas, statement print(i) tidak dieksekusi ada continue .
Hasilnya bisa dilihat pada gambar berikut, nilai yang di-print yaitu angka 3
hingga 7 saja.
for i in range(10):
if i < 3 or i > 7:
continue
print(i)
A.11.3. Label perulangan
Python tidak mengenal konsep perulangan yang memiliki label.
Teknik menamai perulangan dengan label umumnya digunakan untuk
mengontrol flow pada perulangan bercabang / nested, misalnya untuk
menghentikan perulangan terluar secara paksa ketika suatu kondisi terpenuhi.
Di Python, algoritma seperti ini bisa diterapkan namun memakai
tambahan kode. Contoh penerapannya bisa dilihat pada kode berikut:
Penjelasan:
max = int(input("jumlah bintang: "))
outer_loop = True
for i in range(max):
if not outer_loop:
break
for j in range(i + 1):
print("*", end=" ")
if j >= 7:
outer_loop = False
break
print()
• Program yang memiliki perulanga nested dengan jumlah perulangan ada 2.
• Disiapkan sebuah variabel bool bernama outer_loop untuk kontrol
perulangan terluar.
• Ketika nilai j (yang merupakan variabel counter perulangan terdalam)
yaitu lebih dari atau sama dengan 7 , maka variabel outer_loop di set
nilainya menjadi False , dan perulangan terdalam di- break secara
paksa.
• Dengan ini maka perulangan terluar akan terhenti.
Catatan chapter 📑📑
â—‰ Source code praktik
github.com/novalagung/dasarpemrogramanpython-example/../break-
continue
â—‰ Chapter relevan lainnya
• Perulangan ➜ for & range
• Perulangan ➜ while
â—‰ Referensi
• https://docs.python.org/3/tutorial/controlflow.html
A.12. Python List
List yaitu tipe data kolektif yang disimpan secara urut dan bisa diubah
nilainya (istilah lainnya yaitu tipe data sequence).
Pada bahasa pemrograman umumnya ada tipe data array. List di Python ini
memiliki banyak kemiripan dengan array, bedanya list bisa berisi data dengan
berbagai macam tipe data, jadi tidak harus sejenis tipe datanya.
Pada chapter ini kita akan belajar lebih detail mengenai list dan
pengoperasiannya.
A.12.1. Pengenalan list
Deklarasi variabel dan data list yaitu memakai literal list dengan notasi
penulisan seperti berikut:
# contoh list
list_1 = [10, 70, 20]
# list dengan deklarasi element secara vertikal
list_2 = [
'ab',
'cd',
'hi',
'ca'
]
# list dengan element berisi bermacam-macam tipe data
list_3 = [3.14, 'hello python', True, False]
# list kosong
list_4 = []
Data dalam list biasa disebut dengan element. Setiap elemen disimpan dalam
list secara urut dengan penanda urutan yang disebut index. Nilai index
dimulai dari angka 0 .
Sebagai contoh, pada variabel list_1 di atas:
• Element index ke- 0 yaitu data 10
• Element index ke- 1 yaitu data 70
• Element index ke- 2 yaitu data 20
A.12.2. Perulangan list
List yaitu salah satu tipe data yang dapat digunakan langsung pada
perulangan for . Contoh:
Selain itu, perulangan list bisa juga dilakukan memakai index, contohnya
seperti berikut:
Fungsi len() digunakan untuk menghitung jumlah element list. Dengan
mengkombinasikan nilai balik fungsi ini dan fungsi range() bisa terbentuk
data range dengan lebar sama dengan lebar list.
list_1 = [10, 70, 20]
for e in list_1:
print("elem:", e)
list_1 = [10, 70, 20]
for i in range(0, len(list_1)):
print("index:", i, "elem:", list_1[i])
â—‰ Fungsi enumerate()
Fungsi enumerate() digunakan untuk membuat data sequence menjadi data
enumerasi, yang jika dimasukan ke perulangan di setiap iterasinya bisa kita
akses index beserta element-nya.
A.12.3. Nested list
Penulisan nested list cukup mudah, contohnya bisa dilihat pada program
matrix berikut:
list_1 = [10, 70, 20]
for i, v in enumerate(list_1):
print("index:", i, "elem:", v)
matrix = [
[0, 1, 0, 1, 0],
[1, 1, 1, 0, 0],
[0, 0, 0, 1, 1],
[0, 1, 1, 1, 0],
]
for row in matrix:
for cel in row:
print(cel, end=" ")
print()
A.12.4. Fungsi list()
â—‰ Konversi range ke list
Data range (hasil pemanggilan fungsi range() ) bisa dikonversi ke bentuk list
memakai fungsi list() . Cara ini cukup efisien untuk pembuatan data
list yang memiliki pattern atau pola. Sebagai contoh:
• List dimulai angka 0 hingga 9 :
• List dimulai angka 1 hingga 21 dengan penambahan 3 :
• List dimulai angka 100 hingga 0 dengan pengurangan -10 :
range_1 = range(0, 10)
list_1 = list(range_1)
print(list_1)
# output ➜ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range_2 = range(0, 22, 3)
list_2 = list(range_2)
print(list_2)
# output ➜ [0, 3, 6, 9, 12, 15, 18, 21]
Selain metode ini, ada juga cara lainnya untuk membuat list, yaitu
memakai metode list comprehension, yang akan dibahas pada
chapter berikutnya, yaitu List Comprehension
â—‰ Konversi string ke list
Selain untuk konversi data range ke list, fungsi list() bisa digunakan untuk
konversi data string ke list, dengan hasil yaitu setiap karakter string menjadi
element list.
â—‰ Konversi tuple ke list
Tipe data tuple bisa diubah bentuknya menjadi list dengan memakai
fungsi list() . Contoh penerapannya:
range_3 = range(100, 0, -10)
list_3 = list(range_3)
print(list_3)
# output ➜ [100, 90, 80, 70, 60, 50, 40, 30, 20, 10]
alphabets = list('abcdefgh')
print(alphabets)
# output ➜ ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
tuple_1 = (1, 2, 3, 4)
numbers = list(tuple_1)
print(numbers)
# output ➜ [1, 2, 3, 4]
Pembahasan detail mengenai tuple ada di chapter Tuple
A.12.5. Operasi pada list
â—‰ Mengakses element via index
Nilai elemen list bisa diakses memakai notasi list[index] . Contoh:
DANGER
Pengaksesan elemen memakai index di-luar kapasitas data akan
menghasilkan error.
Sebagai contoh, data list_1 di atas jika diakses index ke-3-nya misalnya
( list_1[3] ) hasilnya yaitu error.
â—‰ Mengecek apakah element ada
Kombinasi keyword if dan in bisa digunakan untuk mengidentifikasi
apakah suatu element merupakan bagian dari list atau tidak. Contoh
penerapannya:
list_1 = [10, 70, 20]
elem_1st = list_1[0]
elem_2nd = list_1[1]
elem_3rd = list_1[2]
print(elem_1st, elem_2nd, elem_3rd)
# output ➜ [10, 70, 20]
â—‰ Slicing list
Slicing yaitu metode pengaksesan list memakai notasi slice. Notasi ini
mirip seperti array, namun mengembalikan data bertipe tetap slice.
Contoh pengaplikasian metode slicing bisa dilihat pada kode berikut. Variabel
list_2 diakses element-nya mulai index 1 hingga sebelum 3 :
Pembahasan detail mengenai slice ada di chapter Slice
â—‰ Mengubah nilai element
Cara mengubah nilai element list dengan cara mengakses nilai element
memakai index, kemudian diikuti operator assignment = dan nilai baru.
list_1 = [10, 70, 20]
n = 70
if n in list_1:
print(n, "is exists")
else:
print(n, "is NOT exists")
# output ➜ 70 is exists
list_2 = ['ab', 'cd', 'hi', 'ca']
print('list_2:', list_2)
# output ➜ list2: ['ab', 'cd', 'hi', 'ca']
slice_1 = list_2[1:3]
print('slice_1:', slice_1)
# output ➜ slice_1: ['cd', 'hi']
â—‰ Append element
Operasi append atau menambahkan element baru setelah index terakhir, bisa
memakai 2 cara:
• via method append() :
• via slicing:
list_2 = ['ab', 'cd', 'hi', 'ca']
print('before:', list_2)
# output ➜ before: ['ab', 'cd', 'hi', 'ca']
list_2[1] = 'zk'
list_2[2] = 'sa'
print('after: ', list_2)
# output ➜ after: ['ab', 'zk', 'sa', 'ca']
list_1 = [10, 70, 20]
print('before: ', list_1)
# output ➜ before: [10, 70, 20]
list_1.append(88)
list_1.append(87)
print('after: ', list_1)
# output ➜ after : [10, 70, 20, 88, 87]
list_1 = [10, 70, 20]
print('before: ', list_1)
# output ➜ before: [10, 70, 20]
list_1[len(list_1):] = [88, 87]
print('after: ', list_1)
# output ➜ after : [10, 70, 20, 88, 87]
Pembahasan detail mengenai method ada 4 chapter berikut:
• OOP ➜ Instance Method
• OOP ➜ Class Method
• OOP ➜ Static Method
• OOP ➜ Abstract Method
â—‰ Extend/concat/union element
Operasi extend (atau concat atau union) yaitu operasi penggabungan dua
data list. Ada beberapa metode yang tersedia, diantaranya:
• via method extend() :
• via slicing:
• via operator + :
list_1 = [10, 70, 20]
list_2 = [88, 77]
list_1.extend(list_2)
print(list_1)
# output ➜ [10, 70, 20, 88, 87]
list_1 = [10, 70, 20]
list_2 = [88, 77]
list_1[len(list_1):] = list_2
print(list_1)
# output ➜ [10, 70, 20, 88, 87]
Metode extend memakai operator + mengharuskan hasil operasi
untuk ditampung ke variabel.
â—‰ Menyisipkan element pada index i
Method insert() digunakan untuk menyisipkan element baru pada posisi
index tertentu (misalnya index i ). Hasil operasi ini membuat semua element
setelah index tersebut posisinya bergeser ke kanan.
Pada penggunaannya, para parameter pertama diisi dengan posisi index, dan
parameter ke-2 diisi nilai.
• Variabel list_3 awalnya berisi [10, 70, 20, 70]
• Ditambahkan angka 15 pada index 0 , hasilnya nilai list_3 sekarang
yaitu [15, 10, 70, 20, 70]
• Ditambahkan lagi, angka 25 pada index 2 , hasilnya nilai list_3
list_1 = [10, 70, 20]
list_2 = [88, 77]
list_3 = list_1 + list_2
print(list_3)
# output ➜ [10, 70, 20, 88, 87]
list_3 = [10, 70, 20, 70]
list_3.insert(0, 15)
print(list_3)
# output ➜ [15, 10, 70, 20, 70]
list_3.insert(2, 25)
print(list_3)
# output ➜ [15, 10, 25, 70, 20, 70]
sekarang yaitu [15, 10, 25, 70, 20, 70]
â—‰ Menghapus element
Method remove() digunakan untuk menghapus element. Isi parameter fungsi
dengan element yang ingin di hapus.
Jika element yang ingin dihapus ditemukan ada lebih dari 1, maka yang
dihapus hanya yang pertama (sesuai urutan index).
â—‰ Menghapus element pada index i
Method pop() berfungsi untuk menghapus element pada index tertentu. Jika
tidak ada index yang ditentukan, maka data element terakhir yang dihapus.
Method pop() mengembalikan data element yang berhasil dihapus.
list_3 = [10, 70, 20, 70]
list_3.remove(70)
print(list_3)
# output ➜ [10, 20, 70]
list_3.remove(70)
print(list_3)
# output ➜ [10, 20]
list_3 = [10, 70, 20, 70]
x = list_3.pop(2)
print('list_3:', list_3)
# output ➜ list_3: [10, 70, 70]
print('removed element:', x)
Jika index i yang ingin dihapus tidak diketemukan, maka error IndexError
muncul.
• Lebih detailnya mengenai error dibahas pada chapter Error
Selain memakai method pop() , keyword del bisa difungsikan untuk hal
yang sama, yaitu menghapus elemen tertentu. Contoh penerapannya:
â—‰ Menghapus element pada range index
Python memiliki keyword del yang berguna untuk menghapus suatu data.
list_3 = [10, 70, 20, 70]
x = list_3.pop(7)
list_3 = [10, 70, 20, 70]
print('len:', len(list_3), "data:", list_3)
del list_3[1]
print('len:', len(list_3), "data:", list_3)
Dengan menggabungkan keyword ini dan operasi slicing, kita bisa menghapus
element dalam range tertentu dengan cukup mudah.
Contoh, menghapus element pada index 1 hingga sebelum 3 :
â—‰ Menghitung jumlah element
Fungsi len() digunakan untuk menghitung jumlah element.
Selain fungsi len() , ada juga method count() milik method slice yang
kegunaannya memiliki kemiripan. Perbedaannya, method count() melakukan
operasi pencarian sekaligus menghitung jumlah element yang ditemukan.
Agar lebih jelas, silakan lihat kode berikut:
list_3 = [10, 70, 20, 70]
del list_3[1:3]
print(list_3)
# output ➜ [10, 70]
list_3 = [10, 70, 20, 70]
total = len(list_3)
print(total)
# output ➜ 4
list_3 = [10, 70, 20, 70]
count = list_3.count(70)
print('jumlah element dengan data `70`:', count)
# output ➜ jumlah element dengan data `70`: 2
â—‰ Mencari index element list
Untuk mencari index memakai nilai element, gunakan method index()
milik list. Contoh bisa dilihat berikut, data cd ada dalam list pada index 1 .
Jika data element yang dicari tidak ada, maka akan muncul error ValueError :
â—‰ Mengosongkan list
Ada dua cara untuk mengosongkan list:
• via method clear() :
list_2 = ['ab', 'cd', 'hi', 'ca']
idx_1st = list_2.index('cd')
print('idx_1st: ', idx_1st)
# output ➜ idx_1st: 1
idx_2nd = list_2.index('kk')
print('idx_2nd: ', idx_2nd)
• Menimpanya dengan [] :
• memakai keyword del dan slicing:
â—‰ Membalik urutan element list
Method reverse() digunakan untuk membalik posisi element pada list.
â—‰ Copy list
Ada 2 cara untuk menduplikasi list, memakai method copy() dan teknik
list_1 = [10, 70, 20]
list_1.clear()
print(list_1)
# output ➜ []
list_1 = [10, 70, 20]
list_1 = []
print(list_1)
# output ➜ []
list_1 = [10, 70, 20]
del list_1[:]
print(list_1)
# output ➜ []
list_1 = [10, 70, 20]
list_1.reverse()
print(list_1)
# output ➜ [20, 70, 10]
slicing.
• memakai method copy() :
• Kombinasi operasi assignment dan slicing:
Operasi copy disini jenisnya yaitu shallow copy.
Lebih detailnya mengenai shallow copy vs deep copy dibahas pada
chapter terpisah.
â—‰ Sorting
Mengurutkan data list bisa dilakukan memakai default sorter milik Python,
yaitu method sort() .
list_1 = [10, 70, 20]
list_2 = list_1.copy()
print(list_1)
# output ➜ [10, 70, 20]
print(list_2)
# output ➜ [10, 70, 20]
list_1 = [10, 70, 20]
list_2 = list_1[:]
print(list_1)
# output ➜ [10, 70, 20]
print(list_2)
# output ➜ [10, 70, 20]
list_1 = [10, 70, 20]
list_1.sort()
Method ini sebenarnya menyediakan kapasitas sorting yang cukup advance,
caranya dengan cara menambahkan closure/lambda pada argument method
ini.
Pembahasan detail mengenai closure ada di chapter Function ➜ Closure
Pembahasan detail mengenai lambda ada di chapter Function ➜ Lambda
Catatan chapter 📑📑
â—‰ Source code praktik
github.com/novalagung/dasarpemrogramanpython-example/../list
â—‰ Chapter relevan lainnya
• Perulangan ➜ for & range
• List Comprehension
• Slice
• Function ➜ Closure
• Function ➜ Lambda
â—‰ Referensi
• https://docs.python.org/3/tutorial/datastructures.html
• https://docs.python.org/3/library/stdtypes.html#typesseq
A.13. Python List
Comprehension
List comprehension yaitu metode ringkas pembuatan list (selain
memakai literal [] atau memakai fungsi list() ). Cara ini lebih
banyak diterapkan untuk operasi list yang menghasilkan struktur baru.
Pada chapter ini kita akan mempelajarinya.
A.13.1. Pengenalan list comprehension
Metode penulisan list comprehension membuat kode menjadi sangat ringkas,
dengan konsekuensi agak sedikit membingungkan untuk yang belum terbiasa.
Jadi penulis sarankan gunakan sesuai kebutuhan.
Silakan pelajari contoh berikut agar lebih mudah memahami seperti apa itu list
comprehension.
â—‰ Contoh #1
Perulangan berikut:
... bisa dituliskan lebih ringkas memakai list comprehension, menjadi
seq = []
for i in range(5):
seq.append(i * 2)
print(seq)
# output ➜ [0, 2, 4, 6, 8]
seperti berikut:
â—‰ Contoh #2
Perulangan berikut:
... bisa dituliskan lebih ringkas menjadi seperti berikut:
â—‰ Contoh #3
Perulangan berikut:
seq = [i * 2 for i in range(5)]
print(seq)
# output ➜ [0, 2, 4, 6, 8]
seq = []
for i in range(10):
if i % 2 == 1:
seq.append(i)
print(seq)
# output ➜ [1, 3, 5, 7, 9]
seq = [i for i in range(10) if i % 2 == 1]
print(seq)
# output ➜ [1, 3, 5, 7, 9]
seq = []
for i in range(1, 10):
... bisa dituliskan lebih ringkas menjadi dengan bantuan ternary menjadi
seperti ini:
... dan bisa dijadikan lebih ringkas lagi memakai list comprehension:
â—‰ Contoh #4
Perulangan berikut:
... bisa dituliskan lebih ringkas menjadi seperti berikut:
seq = []
for i in range(1, 10):
seq.append(i * (2 if i % 2 == 0 else 3))
print(seq)
# output ➜ [3, 4, 9, 8, 15, 12, 21, 16, 27]
seq = [(i * (2 if i % 2 == 0 else 3)) for i in range(1, 10)]
print(seq)
# output ➜ [3, 4, 9, 8, 15, 12, 21, 16, 27]
list_x = ['a', 'b', 'c']
list_y = ['1', '2', '3']
seq = []
for x in list_x:
for y in list_y:
seq.append(x + y)
print(seq)
# output ➜ ['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3']
â—‰ Contoh #5
Perulangan berikut:
... bisa dituliskan lebih ringkas menjadi seperti ini:
seq = [x + y for x in list_x for y in list_y]
print(seq)
# output ➜ ['a1', 'a2', 'a3', 'b1', 'b2', 'b3', 'c1', 'c2', 'c3']
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
transposed = []
for i in range(4):
tr = []
for row in matrix:
tr.append(row[i])
transposed.append(tr)
print(transposed)
# output ➜ [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
transposed = []
... dan bisa dijadikan lebih ringkas lagi memakai list comprehension:
Catatan chapter 📑📑
â—‰ Source code praktik
github.com/novalagung/dasarpemrogramanpython-example/../list-
comprehension
â—‰ Chapter relevan lainnya
• Perulangan ➜ for & range
• List
• Generator & Yield
â—‰ TBA
• Stack vs Queue
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
transposed = [[row[i] for row in matrix] for i in range(4)]
print(transposed)
# output ➜ [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
â—‰ Referensi
• https://docs.python.org/3/tutorial/datastructures.html
• https://docs.python.org/3/library/stdtypes.html#typesseq
A.14. Python Tuple
Tuple yaitu tipe data sequence yang ideal digunakan untuk menampung nilai
kolektif yang isinya tidak akan berubah (immutable), berbeda dengan list yang lebih
cocok untuk data yang bisa berubah nilai elemen-nya (mutable).
Pada chapter ini kita akan belajar tentang topik ini.
A.15.1. Tuple vs. List
Tipe data tuple sekilas memiliki beberapa kemiripan dan juga perbedaan jika
dibandingkan dengan list.
Tuple List
Literal () , atau tuple() ,atau elemen ditulis tanpa () [] , atau list()
Contoh
Urutan
elemen urut sesuai index
x = ()
x = tuple()
x = (1, True, "h", 2, 1)
x = 1, True, "h", 2, 1
x = []
x = list()
x = [1, True, "h", 2, 1]
Tuple List
Pengaksesan
elemen via index dan perulangan
Mutability elemen tidak bisa diubah elemen bisa diubah
Duplikasi
elemen elemen bisa duplikat
Tipe data
elemen bisa sejenis maupun berbeda satu sama lain
A.14.2. Pengenalan Tuple
Deklarasi tuple memakai literal () dengan delimiter tanda koma ( , ). Contoh
syntax-nya bisa dilihat pada kode berikut:
• Tuple bisa menampung element yang tipe datanya bisa sejenis bisa tidak, sama
seperti list.
• Fungsi len() digunakan untuk menghitung lebar tuple.
tuple_1 = (2, 3, 4, "hello python", False)
print("data:", tuple_1)
# output ➜ data: (2, 3, 4, "hello python", False)
print("total elem:", len(tuple_1))
# output ➜ total elem: 5
A.14.3. Mengakses element tuple via index
Element tuple bisa diakses memakai notasi tuple[index] .
DANGER
Pengaksesan elemen memakai index di-luar kapasitas data akan
menghasilkan error.
Sebagai contoh, data tuple_1 di atas jika diakses index ke-4-nya misalnya
( tuple_1[4] ) hasilnya yaitu error.
A.14.4. Perulangan tuple
Tuple yaitu salah satu tipe data yang bisa digunakan secara langsung pada
perulangan memakai keyword for .
Pada contoh berikut, variabel tuple_2 dimasukan ke blok perulangan. Di setiap
iterasinya, variabel t berisi element tuple.
tuple_1 = (2, 3, 4, 5)
print("elem 0:", tuple_1[0])
# output ➜ elem 0: 2
print("elem 1:", tuple_1[1])
# output ➜ elem 1: 3
tuple_1 = (2, 3, 4, 5)
print("elem 0:", tuple_1[5])
# output ➜ IndexError: tuple index out of range
Perulangan di atas ekuivalen dengan perulangan berikut:
â—‰ Fungsi enumerate()
Fungsi enumerate() digunakan untuk membuat data sequence menjadi data
enumerasi, yang jika dimasukan ke perulangan di setiap iterasinya bisa kita akses
index beserta element-nya.
A.14.5. Mengecek apakah element ada
Kombinasi keyword if dan in bisa digunakan untuk mengidentifikasi apakah
suatu element merupakan bagian dari tuple atau tidak. Contoh penerapannya:
tuple_2 = ('ultra instinc shaggy', 'nightwing', 'noob saibot')
for t in tuple_2:
print(t)
tuple_2 = ('ultra instinc shaggy', 'nightwing', 'noob saibot')
for i in range(0, len(tuple_2)):
print("index:", i, "elem:", tuple_2[i])
tuple_2 = ('ultra instinc shaggy', 'nightwing', 'noob saibot')
for i, v in enumerate(tuple_2):
print("index:", i, "elem:", v)
A.14.6. Nested tuple
Nested tuple dibuat dengan menuliskan data tuple sebagai element tuple. Contoh:
Penulisan data literal nested tuple bisa dalam bentuk horizontal maupun vertikal.
Perbandingannya bisa dilihat pada kode berikut:
tuple_1 = (10, 70, 20)
n = 70
if n in tuple_1:
print(n, "is exists")
else:
print(n, "is NOT exists")
# output ➜ 70 is exists
tuple_nested = ((0, 2), (0, 3), (2, 2), (2, 4))
for row in tuple_nested:
for cell in row:
print(cell, end=" ")
print()
# horizontal
tuple_nested = ((0, 2), (0, 3), (2, 2), (2, 4))
A.14.7. List dan tuple
Tipe data list dan tuple umum dikombinasikan. Keduanya sangat mirip tapi memiliki
perbedaan yang jelas, yaitu nilai tuple tidak bisa dimodifikasi sedangkan list bisa.
# deklarasi data list berisi elemen tuple
data = [
("ultra instinc shaggy", 1, True, ['detective', 'saiyan']),
("nightwing", 3, True, ['teen titans', 'bat family']),
]
# append tuple ke list
data.append(("noob saibot", 6, False, ['brotherhood of shadow']))
# append tuple ke list
data.append(("tifa lockhart", 2, True, ['avalanche']))
# print data
print("name | rank | win | affliation")
print("------------------------------")
for row in data:
for cell in row:
print(cell, end=" | ")
print()
A.14.8. Fungsi tuple()
â—‰ Konversi string ke tuple
Fungsi tuple() bisa digunakan untuk konversi data string ke tuple. Hasilnya
yaitu nilai tuple dengan element berisi setiap karakter yang ada di string. Contoh:
â—‰ Konversi list ke tuple
Konversi list ke tuple bisa dilakukan dengan mudah memakai fungsi tuple() .
Contoh penerapannya:
â—‰ Konversi range ke tuple
Range juga bisa dikonversi ke tuple memakai fungsi tuple() .
alphabets = tuple('abcdefgh')
print(alphabets)
# output ➜ ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')
numbers = tuple([2, 3, 4, 5])
print(numbers)
# output ➜ (2, 3, 4, 5)
r = range(0, 3)
rtuple = tuple(r)
print(rtuple)
# output ➜ (0, 1, 2)
A.14.9. Tuple packing dan unpacking
â—‰ Tuple packing
Packing yaitu istilah untuk menggabungkan beberapa data menjadi satu data
kolektif. Contoh pengaplikasiannya bisa dilihat pada program berikut, ada 3 variabel
dengan isi berbeda di-pack menjadi satu data tuple.
Bisa dilihat penerapan metode packing cukup mudah. Tulis saja data atau variabel
yang ingin di-pack dalam notasi tuple, kemudian gunakan sebagai nilai pada operasi
assignment.
Pada contoh di atas, variabel row_data menampung nilai tuple hasil packing
variabel first_name , rank , dan win .
O iya, penulisan tuple boleh juga dituliskan tanpa memakai karakterk ( & ) .
Namun, pastikan untuk hati-hati dalam penerapan penulisan tuple tanpa () ,
karena bisa jadi salah paham. Jangan gunakan metode ini pada saat memakai
first_name = "aerith gainsborough"
rank = 11
win = False
row_data = (first_name, rank, win)
print(row_data)
# output ➜ ('aerith gainsborough', 11, False)
# dengan ()
row_data = (first_name, rank, win)
# tanpa ()
row_data = first_name, rank, win
tuple sebagai nilai argument pemanggilan fungsi, karena interpreter akan
menganggapnya sebagai banyak argument.
Penjelasan detail mengenai packing ada di chapter Pack Unpack ➜ Tuple, List,
Set, Dict
â—‰ Tuple unpacking
Unpacking yaitu istilah untuk menyebar isi suatu data kolektif ke beberapa
variabel. Unpacking merupakan kebalikan dari packing.
Contoh penerapan tuple unpacking:
Penjelasan detail mengenai packing ada di chapter Pack Unpack ➜ Tuple, List,
Set, Dict
A.14.10. Tuple kosong ()
Tuple bisa saja tidak berisi apapun, contohnya data () , yang cukup umum
digunakan untuk merepresentasikan data kolektif yang isinya bisa saja kosong.
# fungsi print() dengan satu argument berisi tuple (first_name, rank, win)
print((first_name, rank, win))
# fungsi print() dengan isi 3 arguments: first_name, rank, win
print(first_name, rank, win)
row_data = ('aerith gainsborough', 11, False)
first_name, rank, win = row_data
print(first_name, rank, win)
# output ➜ aerith gainsborough 11 False
Berikut yaitu contoh penerapannya, dimisalkan ada data kolektif yang didapat dari
database berbentuk array object. Data tersebut perlu disimpan oleh variabel list
yang element-nya yaitu tuple dengan spesifikasi:
• Tuple element index 0 berisi name .
• Tuple element index 1 berisi rank .
• Tuple element index 2 berisi win .
• Tuple element index 3 berisi affliation , dimana affliation bisa saja kosong.
Sample data bisa dilihat berikut ini:
Bisa dilihat data kucing meong tidak memiliki affliation , karena terisi dengan
nilai tuple () .
Catatan chapter 📑📑
â—‰ Source code praktik
github.com/novalagung/dasarpemrogramanpython-example/../tuple
empty_tuple = ()
print(empty_tuple)
# output ➜ ()
data = [
("ultra instinc shaggy", 1, True, ('detective', 'saiyan')),
("nightwing", 3, True, ('teen titans', 'bat family')),
("kucing meong", 7, False, ()),
]
â—‰ Chapter relevan lainnya
• List
â—‰ TBA
• Slicing tuple
• Zip
â—‰ Referensi
• https://docs.python.org/3/tutorial/datastructures.html
• https://docs.python.org/3/library/stdtypes.html#typesseq
A.15. Python Set
Set yaitu tipe data yang digunakan untuk menampung nilai kolektif unik, jadi tidak ada duplikasi elemen. Elemen
yang ada pada set disimpan secara tidak urut.
Pada chapter ini, selain mempelajari tentang set kita akan bahas juga satu variasinya yaitu frozenset .
A.15.1. Set vs. Tuple vs. List
Tipe data set sekilas memiliki kemiripan jika dibandingkan dengan tuple dan list, namun sebenarnya lebih banyak
perbedaannya. Silakan lihat tabel berikut untuk lebih jelasnya.
Set Tuple List
Literal
set() , atau
elemen ditulis diapit {
dan }
() , atau tuple() ,
atau elemen ditulis tanpa () [] , atau list()
Contoh
Urutan
elemen tidak urut urut sesuai index
Pengaksesan
elemen hanya via perulangan via index dan perulangan
Mutability elemen bisa diubah elemen tidak bisa diubah elemen bisa diubah
Duplikasi
elemen elemen selalu unik elemen bisa duplikat
Tipe data
elemen bisa sejenis maupun berbeda satu sama lain
x = set()
x = {1, True, "h", 2}
x = ()
x = tuple()
x = (1, True, "h", 2, 1)
x = 1, True, "h", 2, 1
x = []
x = list()
x = [1, True, "h", 2, 1]
A.15.2. Pengenalan Set
Implementasi tipe data set cukup mudah, langsung tulis saja nilai elemen dengan separator , dan diapit
memakai tanda kurung kurawal { } . Contoh:
• Set bisa menampung element yang tipe datanya bisa sejenis bisa tidak, sama seperti tuple dan list.
• Fungsi len() digunakan untuk menghitung lebar set.
INFO
Untuk deklarasi set kosong (tanpa isi), gunakan fungsi set() , bukan {} karena literal tersebut akan
menciptakan data bertipe lainnya yaitu dictionary.
Hanya gunakan kurung kurawal buka dan tutup untuk deklarasi set yang ada elemennya (tidak kosong).
A.15.3. Mengakses elemen set
Nilai set by default hanya bisa diakses memakai perulangan:
data_1 = {1, 'abc', False, ('banana', 'spaghetti')}
print("data:", data_1)# output ➜ data: {1, 'abc', False, ('banana', 'spaghetti')}
print("len:", len(data_1))# output ➜ len: 4
data_2 = set()
print("data:", data_2)# output ➜ data: set()
print("len:", len(data_2))# output ➜ len: 0
fellowship = {'aragorn', 'gimli', 'legolas'}
for p in fellowship:print(p)
Dari limitasi ini, set difungsikan untuk menyelesaikan masalah yang cukup spesifik seperti eliminasi elemen
duplikat.
â—‰ Eliminasi elemen duplikat
Tipe data set memang didesain untuk menyimpan data unik, duplikasi elemen tidak mungkin terjadi, bahkan
meskipun dipaksa. Contoh:
Variabel data yang diisi dengan data set dengan banyak elemen duplikasi, sewaktu di-print elemennya yaitu
unik.
Ok, selanjutnya, pada contoh kedua berikut kita akan coba gunakan set untuk mengeliminasi elemen duplikat pada
suatu list.
Penjelasan untuk kode di atas:
• Variabel data berisi list dengan banyak elemen duplikasi
• Data list kemudian dikonversi ke bentuk set dengan cara membungkus variabelnya memakai fungsiset() . Operasi ini menghasilkan nilai set berisi elemen unik.
• Selanjutnya data set dikonversi lagi ke bentuk list memakai fungsi list() .
â—‰ Mengecek apakah element ada
Selain untuk kasus di atas, set juga bisa digunakan untuk pengecekan membership dengan kombinasi keywordif dan in .
Pada contoh berikut, variabel fellowship dicek apakah berisi string gimli atau tidak.
data = {1, 2, 3, 2, 1, 4, 5, 2, 3, 5}print(data)# output ➜ {1, 2, 3, 4, 5}
data = [1, 2, 3, 2, 1, 4, 5, 2, 3, 5]print(data)# output ➜ [1, 2, 3, 2, 1, 4, 5, 2, 3, 5]
data_unique_set = set(data)print(data_unique_set)# output ➜ {1, 2, 3, 4, 5}
data_unique = list(data_unique_set)print(data_unique)# output ➜ [1, 2, 3, 4, 5]
fellowship = {'aragorn', 'gimli', 'legolas'}to_find = 'gimli'
if to_find in fellowship:
A.15.4. Operasi pada set
â—‰ Menambah element
Method add() milik tipe data set digunakan untuk menambahkan element baru. O iya, perlu diingat bahwa tipe
data ini didesain untuk mengabaikan urutan elemen, jadi urutan tersimpannya elemen bisa saja acak.
â—‰ Menghapus element secara acak
Gunakan method pop() untuk menghapus satu elemen secara acak atau random.
â—‰ Menghapus spesifik elemen
Ada dua method tersedia untuk kebutuhan menghapus elemen tertentu dari suatu set, yaitu discard() danremove() . Penggunaan keduanya yaitu sama, harus disertai dengan 1 argument pemanggilan method, yaitu
elemen yang ingin dihapus.
Pada contoh berikut, elemen boromir dihapus dari set memakai method discard() , dan elemen gandalf
dihapus memakai method remove() .
fellowship = set()
fellowship.add('aragorn')print("len:", len(fellowship), "data:", fellowship)# output ➜ len: 1 data: {'aragorn'}
fellowship.add('gimli')print("len:", len(fellowship), "data:", fellowship)# output ➜ len: 2 data: {'gimli', 'aragorn'}
fellowship.add('legolas')print("len:", len(fellowship), "data:", fellowship)# output ➜ len: 3 data: {'gimli', 'legolas', 'aragorn'}
fellowship = {'narya', 'nenya', 'nilya'}
fellowship.pop()print("len:", len(fellowship), "data:", fellowship)# output ➜ len: 2 data: {'narya', 'nilya'}
fellowship.pop()print("len:", len(fellowship), "data:", fellowship)# output ➜ len: 1 data: {'nilya'}
fellowship.pop()print("len:", len(fellowship), "data:", fellowship)# output ➜ len: 0 data: set()
Perbedaan dua method di atas: jika elemen yang ingin dihapus tidak ada, method discard() tidak memunculkan
error, sedangkan method remove() memunculkan error. Contoh:
â—‰ Mengosongkan isi set
Method clear() digunakan untuk mengosongkan isi set.
â—‰ Copy set
Method copy() digunakan untuk meng-copy set, menghasilkan data set baru.
fellowship = {'aragorn', 'gimli', 'legolas', 'gandalf', 'boromir', 'frodo', 'sam', 'merry', 'pippin'}print("fellowship:", fellowship)# output ➜ fellowship: {'aragorn', 'gimli', 'legolas', 'gandalf', 'boromir', 'frodo', 'sam', 'merry','pippin'}
fellowship.discard('boromir')print("fellowship:", fellowship)# output ➜ fellowship: {'legolas', 'pippin', 'sam', 'aragorn', 'gimli', 'frodo', 'gandalf', 'merry'}
fellowship.remove('gandalf')print("fellowship:", fellowship)# output ➜ fellowship: {'legolas', 'pippin', 'sam', 'aragorn', 'gimli', 'frodo', 'merry'}
fellowship = {'aragorn', 'gimli', 'legolas', 'gandalf', 'boromir', 'frodo', 'sam', 'merry', 'pippin'}print("fellowship:", fellowship)
fellowship.discard('batman')print("fellowship:", fellowship)
fellowship.remove('superman')print("fellowship:", fellowship)
fellowship = {'aragorn', 'gimli', 'legolas'}fellowship.clear()
print("len:", len(fellowship), "data:", fellowship)# output ➜ len: 0 data: set()
Pada contoh di atas, statement data1.copy() menghasilkan data baru dengan isi sama seperti isi data1
ditampung oleh variabel bernama data2 .
Operasi copy disini jenisnya yaitu shallow copy.
Lebih detailnya mengenai shallow copy vs deep copy dibahas pada chapter terpisah.
â—‰ Pengecekan difference antar set
Method difference() digunakan untuk mencari perbedaan elemen antara data (dimana method dipanggil) vs.
data pada argument pemanggilan method tersebut.
Sebagai contoh, pada variabel fellowship berikut akan dicari elemen yang tidak ada di variabel hobbits .
Selain method di atas, adalagi method difference_update() yang kegunaannya yaitu mengubah nilai data
(dimana method dipanggil) dengan nilai baru yang didapat dari perbedaan elemen antara data tersebut vs. data
pada argument pemanggilan method.
â—‰ Pengecekan intersection antar set
Method intersection() digunakan untuk mencari elemen yang ada di data (dimana method dipanggil) vs. data
pada argument pemanggilan method tersebut.
Pada variabel fellowship berikut akan dicari elemen yang juga ada pada variabel hobbits .
data1 = {'aragorn', 'gimli', 'legolas'}print("len:", len(data1), "data1:", data1)# output ➜ len: 3 data1: {'gimli', 'legolas', 'aragorn'}
data2 = data1.copy()print("len:", len(data2), "data2:", data2)# output ➜ len: 3 data2: {'gimli', 'legolas', 'aragorn'}
fellowship = {'aragorn', 'gimli', 'legolas', 'gandalf', 'boromir', 'frodo', 'sam', 'merry', 'pippin'}hobbits = {'frodo', 'sam', 'merry', 'pippin', 'bilbo'}
diff = fellowship.difference(hobbits)print("diff:", diff)# output ➜ diff: {'boromir', 'legolas', 'aragorn', 'gimli', 'gandalf'}
fellowship.difference_update(hobbits)print("fellowship:", fellowship)# output ➜ fellowship: {'boromir', 'legolas', 'aragorn', 'gimli', 'gandalf'}
fellowship = {'aragorn', 'gimli', 'legolas', 'gandalf', 'boromir', 'frodo', 'sam', 'merry', 'pippin'}hobbits = {'frodo', 'sam', 'merry', 'pippin', 'bilbo'}
Tersedia juga method intersection_update() yang berguna untuk mengubah nilai data (dimana method
dipanggil) dengan nilai baru yang didapat dari kesamaan elemen antara data tersebut vs. data pada argument
pemanggilan method.
â—‰ Pengecekan keanggotaan subset
Di awal chapter ini kita telah sedikit menyinggung pengecekan membership memakai kombinasi keyword if
dan in . Selain metode tersebut, ada alternatif cara lain yang bisa digunakan untuk mengecek apakah suatu data
(yang pada konteks ini yaitu set) merupakan bagian dari element set lain, caranya memakai methodissubset() .
Method issubset() menerima argument berupa data set. Contohnya bisa dilihat pada kode berikut:
• Nilai res_1 yaitu False karena set hobbits_1 memiliki setidaknya satu elemen yang bukan anggota darifellowship , yaitu bilbo .
• Nilai res_2 yaitu True karena set hobbits_2 semua elemennya yaitu anggota dari fellowship .
â—‰ Pengecekan keanggotaan superset
Selain issubset() , ada juga issuperset() yang fungsinya kurang lebih sama namun kondisinya
pengecekannya dibalik.
Agar lebih jelas, silakan lihat kode berikut:
fellowship.intersection_update(hobbits)print("fellowship:", fellowship)# output ➜ fellowship: {'frodo', 'pippin', 'sam', 'merry'}
fellowship = {'aragorn', 'gimli', 'legolas', 'gandalf', 'boromir', 'frodo', 'sam', 'merry', 'pippin'}
hobbits_1 = {'frodo', 'sam', 'merry', 'pippin', 'bilbo'}res_1 = hobbits_1.issubset(fellowship)print("res_1:", res_1)# output ➜ res_1: False
hobbits_2 = {'frodo', 'sam', 'merry', 'pippin'}res_2 = hobbits_2.issubset(fellowship)print("res_2:", res_2)# output ➜ res_2: True
fellowship = {'aragorn', 'gimli', 'legolas', 'gandalf', 'boromir', 'frodo', 'sam', 'merry', 'pippin'}
hobbits_1 = {'frodo', 'sam', 'merry', 'pippin', 'bilbo'}res_1 = fellowship.issuperset(hobbits_1)print("res_1:", res_1)# output ➜ res_1: False
hobbits_2 = {'frodo', 'sam', 'merry', 'pippin'}res_2 = fellowship.issuperset(hobbits_2)
• Nilai res_1 yaitu False karena set hobbits_1 memiliki setidaknya satu elemen yang bukan anggota darifellowship , yaitu bilbo .
• Nilai res_2 yaitu True karena set hobbits_2 semua elemennya yaitu anggota dari fellowship .
â—‰ Pengecekan keanggotaan disjoint
Method ini mengembalikan nilai True jika set pada pemanggilan fungsi berisi elemen yang semuanya bukan
anggota data dimana method dipanggil.
• Nilai res_1 yaitu False karena beberapa anggota set fellowship yaitu aragorn dan gimli' .
• Nilai res_2 yaitu False karena beberapa anggota set fellowship yaitu pippin . Sedangkan bilbo ia
bukanlah anggota fellowship , tapi karena setidaknya ada 1 elemen yang match, maka method isdisjoint
mengembalikan nilai False .
• Nilai res_3 yaitu True karena bilbo bukanlah anggota fellowship .
â—‰ Extend/concat/union element
Operasi extend (atau concat atau union) yaitu operasi penggabungan dua data set. Ada beberapa metode yang
tersedia, diantaranya:
• via method union() :
• via method update() :
fellowship = {'aragorn', 'gimli', 'legolas', 'gandalf', 'boromir', 'frodo', 'sam', 'merry', 'pippin'}
res_1 = fellowship.isdisjoint({'aragorn', 'gimli'})print("res_1:", res_1)
res_2 = fellowship.isdisjoint({'pippin', 'bilbo'})print("res_2:", res_2)
res_3 = fellowship.isdisjoint({'bilbo'})print("res_3:", res_3)
hobbits = {'frodo', 'sam', 'merry', 'pippin'}dunedain = {'aragorn'}elf = {'legolas'}dwarf = {'gimly'}human = {'boromir'}maiar = {'gandalf'}
fellowship_1 = hobbits.union(dunedain).union(dunedain).union(elf).union(dwarf).union(human).union(maiar)print("fellowship_1:", fellowship_1)# output ➜ fellowship_1: {'boromir', 'gimly', 'legolas', 'pippin', 'sam', 'aragorn', 'frodo', 'gandalf','merry'}
hobbits = {'frodo', 'sam', 'merry', 'pippin'}
Bisa dilihat perbedaannya ada di-bagaimana nilai balik method disimpan.
• Pada method union() , pemanggilan method tersebut mengembalikan data setelah penggabungan, dan bisa
di-chain langsung dengan pemanggilan method union() lainnya.
• Pada method update() , data yang digunakan untuk memanggil method tersebut diubah secara langsung
nilainya.
â—‰ Operator bitwise pada set
• Operasi or pada set memakai operator |
Nilai res berisi elemen set unik kombinasi set a dan set b .
• Operasi and pada set memakai operator &
Nilai res berisi elemen set yang merupakan anggota set a dan set b . Operasi seperti ini biasa disebut
dengan operasi and.
• Operasi exclusive or pada set memakai operator ^
Nilai res berisi elemen set yang ada di set a atau set b tetapi tidak ada di-keduanya.
â—‰ Operator - pada set
Digunakan untuk pencarian perbedaan elemen. Contoh penerapan:
a = set('abracadabra') # {'c', 'a', 'r', 'd', 'b'}b = set('alacazam') # {'c', 'z', 'a', 'm', 'l'}
res = a | bprint(res)# output ➜ {'c', 'z', 'a', 'r', 'd', 'b', 'm', 'l'}
a = set('abracadabra') # {'c', 'a', 'r', 'd', 'b'}b = set('alacazam') # {'c', 'z', 'a', 'm', 'l'}
res = a & bprint(res)# output ➜ {'c', 'a'}
a = set('abracadabra') # {'c', 'a', 'r', 'd', 'b'}b = set('alacazam') # {'c', 'z', 'a', 'm', 'l'}
res = a ^ bprint(res)# output ➜ {'z', 'r', 'b', 'd', 'm', 'l'}
a = set('abracadabra') # {'c', 'a', 'r', 'd', 'b'}
Nilai res berisi elemen set unik yang merupakan anggota set a tapi bukan anggota set b
A.15.5. Fungsi set()
â—‰ Konversi string ke set
String dibungkus memakai method set() menghasilkan data set berisi karakter string yang unik.
â—‰ Konversi list ke set
Data list bisa diubah menjadi set dengan mudah dengan cara membungkusnya memakai fungsi set() . Isi
dari set yaitu elemen unik list.
â—‰ Konversi tuple ke set
Data tuple juga bisa diubah menjadi set via fungsi set() . Isi dari set yaitu elemen unik tuple.
â—‰ Konversi range ke set
Data range (hasil dari pemanggilan fungsi range() ) bisa dikonversi ke bentuk set via fungsi set() .
A.15.6. Set comprehension
Metode comprehension juga bisa diterapkan pada set. Contohnya bisa dilihat pada kode berikut, statement set
comprehension dibuat untuk melakukan pengecekan apakah ada element pada set set('abracadabra') yang
bukan anggota element set('abc') .
data = set('abcda')print('data', data)# output ➜ data {'c', 'b', 'a', 'd'}
data = set(['a', 'b', 'c', 'd', 'a'])print('data', data)# output ➜ data {'c', 'b', 'a', 'd'}
data = set(('a', 'b', 'c', 'd', 'a'))print('data', data)# output ➜ data {'c', 'b', 'a', 'd'}
data = set(range(1, 5))print('data', data)# output ➜ data {1, 2, 3, 4}
A.15.7. frozenset
frozenset yaitu set yang immutable atau tidak bisa diubah nilai elemennya setelah dideklarasikan.
Cara penggunaannya seperti set, perbedaannya pada deklarasi frozenset, fungsi frozenset() digunakan dan
bukan set() .
Semua operasi set, method milik set bisa digunakan pada frozenset, kecuali beberapa operasi yang sifatnya
mutable atau mengubah elemen. Contohnya seperti method add() , pop() , remove() dan lainnya tidak bisa
digunakan di frozenset.
Catatan chapter 📑📑
â—‰ Source code praktik
github.com/novalagung/dasarpemrogramanpython-example/../set
â—‰ Chapter relevan lainnya
• List
• List Comprehension
• Tuple
â—‰ Referensi
• https://docs.python.org/3/tutorial/datastructures.html
• https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset
res = {x for x in set('abracadabra') if x not in set('abc')}print(res)# output ➜ {'d', 'r'}
a = frozenset('abracadabra')print(a)# output ➜ frozenset({'c', 'a', 'r', 'd', 'b'})
b = frozenset('alacazam')print(b)# output ➜ frozenset({'c', 'z', 'a', 'm', 'l'})
A.16. Python Dictionary
Pada chapter ini kita akan belajar salah satu tipe data mapping di Python, yaitu
Dictionary.
A.16.1. Pengenalan Dictionary
Dictionary atau dict yaitu tipe data kolektif berbentuk key-value. Contoh
penulisannya:
Literal dictionary ditulis dengan memakai { } , mirip seperti tipe data
set, hanya saja bedanya pada tipe dictionary isinya berbentuk key-value.
Pembahasan detail mengenai tipe data set ada di chapter Set
Ok, sekarang dari kode di atas, coba tambahkan kode berikut untuk melihat
bagaimana data dictionary dimunculkan di layar console.
profile = {
"id": 2,
"name": "john wick",
"hobbies": ["playing with pencil"],
"is_female": False,
}
print("data:", profile)
print("total keys:", len(profile))
Sedangkan untuk memunculkan nilai item tertentu berdasarkan key-nya, bisa
dilakukan memakai notasi dict["key"] . Contoh:
DANGER
Pengaksesan item memakai key yang tidak dikenali akan
menghasilkan error.
Sebagai contoh, variabel profile di atas jika diakses item dengan key
age misalnya ( profile["age"] ) hasilnya yaitu error.
print("name:", profile["name"])
# output ➜ name: john wick
print("hobbies:", profile["hobbies"])
# output ➜ ['playing with pencil']
profile = {
"id": 2,
"name": "john wick",
"hobbies": ["playing with pencil"],
"is_female": False,
}
print("age:", profile["age"])
# KeyError: 'age'
â—‰ Urutan item dictionary
Mulai dari Python version 3.7, item dictionary tersimpan secara urut. Artinya
urutan item dictionary akan selalu sesuai dengan bagaimana inisialisasi
awalnya.
â—‰ Pretty print dictionary
Ada tips agar data dictionary yang di-print di console muncul dengan tampilan
yang lebih mudah dibaca, dua diantaranya:
• memakai pprint.pprint() :
Import terlebih dahulu module pprint , lalu gunakan fungsi pprint()
untuk memunculkan data ke console.
• memakai json.dumps() :
Import terlebih dahulu module json , lalu gunakan fungsi dumps() untuk
memformat dictionary menjadi bentuk string yang mudah dibaca,
kemudian print memakai print() .
import pprint
pprint.pprint(profile)
Tentukan lebar space indentation sesuai selera (pada contoh di bawah ini
di set nilainya 4 spasi).
Lebih detailnya mengenai JSON dibahas di chapter JSON
A.16.2. Inisialisasi dictionary
Pembuatan data dictionary bisa dilakukan memakai beberapa cara:
• memakai { } :
import json
print(json.dumps(profile, indent=4))
profile = {
"id": 2,
"name": "john wick",
"hobbies": ["playing with pencil"],
"is_female": False,
}
• memakai fungsi dict() dengan isi argument key-value:
• memakai fungsi dict() dengan isi list tuple:
Sedangkan untuk membuat dictionary tanpa item atau kosong, bisa cukup
memakai dict() atau {} :
A.16.3. Perulangan item dictionary
Gunakan keyword for dan in untuk mengiterasi data tiap key milik
profile = dict(
set="id",
name="john wick",
hobbies=["playing with pencil"],
is_female=False,
)
profile = dict([
('set', "id"),
('name', "john wick"),
('hobbies', ["playing with pencil"]),
('is_female', False)
])
profile = dict()
print(profile)
# output ➜ {}
profile = {}
print(profile)
# output ➜ {}
dictionary. Dari key tersebut kemudian akses value-nya.
Karakter \t menghasilkan tab. Penggunaan karakter ini bisa membuat
rapi tampilan output.
Program di atas ketika di run outputnya:
A.16.4. Nested dictionary
Dictionary bercabang atau nested dictionary bisa dimanfaatkan untuk
menyimpan data dengan struktur yang kompleks, misalnya dictionary yang
salah satu value item-nya yaitu list.
Penerapannya tak berbeda seperti inisialisasi dictionary umumnya, langsung
tulis saja dictionary sebagai child dictionary. Contoh:
profile = {
"id": 2,
"name": "mario",
"hobbies": ("playing with luigi", "saving the mushroom kingdom"),
"is_female": False,
}
for key in profile:
print("key:", key, "\t value:", profile[key])
Pada kode di atas, key affliations berisi list object dictionary.
Contoh cara mengakses value nested item dictionary:
profile = {
"id": 2,
"name": "mario",
"hobbies": ("playing with luigi", "saving the mushroom kingdom"),
"is_female": False,
"affliations": [
{
"name": "luigi",
"affliation": "brother"
},
{
"name": "mushroom kingdom",
"affliation": "protector"
},
]
}
print("name:", profile["name"])
print("hobbies:", profile["hobbies"])
print("affliations:")
for item in profile["affliations"]:
print(" ➜ %s (%s)" % (item["name"], item["affliation"]))
# output ↓
#
# name: mario
# hobbies: ('playing with luigi', 'saving the mushroom kingdom')
# affliations:
# ➜ luigi (brother)
# ➜ mushroom kingdom (protector)
A.16.5. Dictionary mutability
Item dictionary yaitu mutable, perubahan value item bisa dilakukan langsung
memakai operator assignment = .
value = profile["affliations"][0]["name"],
profile["affliations"][0]["affliation"]
print(" ➜ %s (%s)" % (value))
# output ➜ luigi (brother)
value = profile["affliations"][1]["name"],
profile["affliations"][1]["affliation"]
print(" ➜ %s (%s)" % (value))
# output ➜ mushroom kingdom (protector)
profile = {
"id": 2,
"name": "mario",
"hobbies": ("playing with luigi", "saving the mushroom kingdom"),
"is_female": False,
"affliations": [
{
"name": "luigi",
"affliation": "brother"
},
{
"name": "mushroom kingdom",
"affliation": "protector"
},
]
}
print(profile["affliations"][0]["name"])
# output ➜ luigi
A.16.6. Operasi data dictionary
â—‰ Pengaksesan item
Pengaksesan item dilakukan lewat notasi dict["key"] , atau bisa dengan
memakai method get() .
â—‰ Mengubah isi dictionary
Cara mengubah value item dictionary yaitu dengan mengaksesnya terlebih
dahulu, kemudian diikuti operasi assignment.
profile = {
"id": 2,
"name": "mario",
"hobbies": ("playing with luigi", "saving the mushroom kingdom"),
"is_female": False,
}
print("id:", profile["id"])
# output ➜ id: 2
print("name:", profile.get("name"))
# output ➜ name: mario
profile = {
"id": 2,
"name": "mario",
"hobbies": ("playing with luigi", "saving the mushroom kingdom"),
"is_female": False,
}
print("name:", profile["name"])
â—‰ Menambah item dictionary
Caranya yaitu mirip seperti operasi pengubahan value item, perbedaannya
ada pada key-nya. Key yang ditulis yaitu key item baru yang ingin
ditambahkan.
Selain cara tersebut, bisa juga dengan memakai method update() . Tulis
key dan value baru yang ingin ditambahka