Comprehension dan Fungsi Bawaan
Tulis solusi ringkas menggunakan comprehension list/dict/set, map, filter, zip, enumerate, dan sorted dengan fungsi key.
Comprehension dan Fungsi Bawaan adalah pelajaran Coding Interview Prep gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Coding Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Coding Interview Prep mencakup 4 pelajaran total.
Pemahaman Daftar: Pemfilteran Ringkas
Pemahaman daftar mengubah perulangan-for-plus-append menjadi satu baris yang rapi: [expr for item in iterable if condition]. Cara ini sedikit lebih cepat dan menunjukkan kefasihan Anda dalam Python.
# Traditional loop
squares = []
for n in range(1, 6):
squares.append(n * n)
print(squares) # [1, 4, 9, 16, 25]
# List comprehension
squares = [n * n for n in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]
# With filter
evens = [n for n in range(10) if n % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]Pemahaman Bersarang untuk Kisi 2D
Pemahaman bersarang membuat kisi 2D—cara standar untuk menyiapkan tabel DP. Hindari [[0]*C]*R, karena cara itu menggunakan satu daftar dalam yang sama untuk setiap baris. Kode ini menunjukkan perbaikannya.
# WRONG: all rows are the same object!
bad = [[0] * 3] * 3
bad[0][0] = 9
print(bad) # [[9,0,0],[9,0,0],[9,0,0]] oops!
# CORRECT: each row is a separate list
good = [[0] * 3 for _ in range(3)]
good[0][0] = 9
print(good) # [[9,0,0],[0,0,0],[0,0,0]]Pemahaman dict dan set
Pemahaman dict dan set menggunakan kurung kurawal: {k: v for ...} untuk dict, dan {expr for ...} untuk set. Keduanya dapat memfilter, sehingga Anda dapat melakukan transformasi atau menghapus duplikat dalam satu baris.
# Dict comprehension: square lookup
sq_map = {n: n**2 for n in range(1, 6)}
print(sq_map) # {1:1, 2:4, 3:9, 4:16, 5:25}
# Set comprehension: unique lengths
words = ['cat', 'dog', 'elephant', 'ant']
unique_lengths = {len(w) for w in words}
print(unique_lengths) # {3, 8} (order varies)Ekspresi Generator: Hemat Memori
Bungkus pemahaman dengan () dan Anda mendapatkan generator yang menghasilkan nilai satu per satu, sehingga menghemat memori. Berikan langsung ke sum, max, atau fungsi lain untuk urutan yang sangat besar.
# List comprehension builds all values at once
total = sum([n**2 for n in range(1_000_000)])
# Generator yields one at a time — lower memory
total = sum(n**2 for n in range(1_000_000))
print(total) # 333332833333500000
# any/all with generators short-circuit early
nums = [4, 6, 8, 3, 10]
has_odd = any(n % 2 == 1 for n in nums)
print(has_odd) # True (stops at 3)map() dan filter(): Gaya Fungsional
map menerapkan fungsi pada setiap item; filter mempertahankan item yang lolos dari suatu pengujian. Keduanya bersifat malas, jadi bungkus dengan list() untuk melihat hasilnya. Pemahaman sering kali lebih jelas.
nums = [1, 2, 3, 4, 5]
# map: apply function to each element
doubled = list(map(lambda n: n * 2, nums))
print(doubled) # [2, 4, 6, 8, 10]
# filter: keep elements passing predicate
evens = list(filter(lambda n: n % 2 == 0, nums))
print(evens) # [2, 4]
# Equivalent comprehensions (often preferred)
doubled = [n * 2 for n in nums]
evens = [n for n in nums if n % 2 == 0]zip(): Memasangkan Urutan
zip memasangkan dua urutan dan berhenti pada urutan yang lebih pendek—cara yang rapi untuk melakukan perulangan pada dua daftar sekaligus. Trik zip(*matrix) mengubah posisi baris dan kolom pada daftar 2D. Lihat kodenya.
keys = ['a', 'b', 'c']
values = [1, 2, 3]
pairs = list(zip(keys, values))
print(pairs) # [('a',1), ('b',2), ('c',3)]
# Build dict from two lists
d = dict(zip(keys, values))
print(d) # {'a':1, 'b':2, 'c':3}
# Transpose a matrix
matrix = [[1,2,3],[4,5,6],[7,8,9]]
transposed = [list(row) for row in zip(*matrix)]
print(transposed) # [[1,4,7],[2,5,8],[3,6,9]]enumerate(): Indeks dan Nilai
enumerate memberi Anda (index, value) saat melakukan perulangan—lebih rapi daripada range(len(lst)) dan bebas dari kesalahan satu posisi. Gunakan opsi start untuk mulai menghitung dari 1.
fruits = ['apple', 'banana', 'cherry']
# Instead of: for i in range(len(fruits)):
for i, fruit in enumerate(fruits):
print(i, fruit)
# 0 apple / 1 banana / 2 cherry
# Start from 1
for i, fruit in enumerate(fruits, 1):
print(f'{i}. {fruit}')
# 1. apple / 2. banana / 3. cherrysorted() dengan Fungsi key
sorted mengembalikan daftar baru yang telah diurutkan dan menerima fungsi key untuk menentukan urutan khusus. Anda dapat mengurutkan berdasarkan panjang, bidang tupel, atau tanpa membedakan huruf besar dan kecil. Kode ini menunjukkan pengurutan dengan beberapa kunci.
# Sort by second element of tuple
intervals = [(1,3),(2,1),(0,5)]
print(sorted(intervals, key=lambda x: x[1]))
# [(2,1),(1,3),(0,5)]
# Sort strings case-insensitively
words = ['Banana', 'apple', 'Cherry']
print(sorted(words, key=str.lower))
# ['apple', 'Banana', 'Cherry']
# Sort by multiple keys: first by length, then alphabetically
words = ['fig', 'apple', 'ant', 'kiwi']
print(sorted(words, key=lambda w: (len(w), w)))
# ['ant', 'fig', 'kiwi', 'apple']min() dan max() dengan key
min dan max juga menerima key, sehingga Anda dapat mengambil elemen dengan nilai hasil pemetaan terkecil atau terbesar dalam satu pemanggilan—misalnya, kata terpanjang. Lihat kodenya.
words = ['banana', 'fig', 'strawberry', 'kiwi']
longest = max(words, key=len)
print(longest) # strawberry
shortest = min(words, key=len)
print(shortest) # fig
# Find interval with earliest end
intervals = [(2,6),(1,3),(4,5)]
earlist_end = min(intervals, key=lambda x: x[1])
print(earlist_end) # (1, 3)any() dan all() untuk Pemeriksaan Hubung-Pendek
any berhenti pada item pertama yang bernilai benar; all berhenti pada item pertama yang bernilai salah. Keduanya menggunakan evaluasi hubung-pendek, sehingga jika dipasangkan dengan generator, keduanya dapat menguji kondisi dengan cepat dan secara malas.
nums = [2, 4, 6, 7, 8]
all_even = all(n % 2 == 0 for n in nums)
print(all_even) # False (7 is odd)
has_large = any(n > 5 for n in nums)
print(has_large) # True (6 qualifies, stops there)
# Practical: check if sudoku row has no duplicates
row = [1, 2, 3, 4, 5, 6, 7, 8, 9]
valid = all(1 <= n <= 9 for n in row) and len(set(row)) == 9
print(valid) # Truesum(), abs(), dan divmod()
Tiga pembantu matematika sering muncul di mana-mana: sum, abs, dan divmod. divmod(a, b) mengembalikan hasil bagi dan sisa secara bersamaan—sangat cocok untuk mengambil digit.
# sum with generator
print(sum(n**2 for n in range(1, 6))) # 55
# abs for distance problems
print(abs(-7)) # 7
# divmod for digit extraction
num = 1234
digits = []
while num:
num, d = divmod(num, 10)
digits.append(d)
digits.reverse()
print(digits) # [1, 2, 3, 4]Pemeriksaan Singkat
Pemeriksaan singkat—mari lihat seberapa baik pemahaman dan fungsi bawaan tersebut Anda kuasai. Satu pertanyaan, Anda pasti bisa. ✅
Rangkuman Pelajaran
Rangkuman: pemahaman mengubah perulangan menjadi satu baris, fungsi bawaan seperti zip dan sorted menerima fungsi key, dan generator menghemat memori untuk pekerjaan satu kali lintas.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Comprehension dan Fungsi Bawaan” gratis?
Ya — teks lengkap “Comprehension dan Fungsi Bawaan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Coding Interview Prep, upgrade ke CoddyKit PRO. Kursus Coding Interview Prep mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Comprehension dan Fungsi Bawaan”?
Tulis solusi ringkas menggunakan comprehension list/dict/set, map, filter, zip, enumerate, dan sorted dengan fungsi key. Kamu berlatih Coding Interview Prep dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Coding Interview Prep?
Tidak diperlukan pengalaman sebelumnya. Coding Interview Prep di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Comprehension dan Fungsi Bawaan” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Coding Interview Prep ini?
Ya. Setiap pelajaran Coding Interview Prep menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- List, Tuple, dan Slicing
- Dictionary dan Set dalam Python
- Comprehension dan Fungsi Bawaan
- Fungsi, Closure, dan Lambda