Pemahaman dan Fungsi Terbina Dalam
Tulis penyelesaian ringkas menggunakan pemahaman senarai, kamus dan set, map, filter, zip, enumerate serta sorted dengan fungsi key.
Pemahaman dan Fungsi Terbina Dalam ialah pelajaran Persediaan Temu Duga Pengaturcaraan percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Persediaan Temu Duga Pengaturcaraan, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.
Pemahaman Senarai: Penapisan Ringkas
Pemahaman senarai menukar gabungan gelung for dan append kepada satu baris yang kemas: [expr for item in iterable if condition]. Ia sedikit lebih pantas dan menunjukkan penguasaan 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 Grid 2D
Pemahaman bersarang membina grid 2D — cara standard untuk menyediakan jadual DP. Elakkan [[0]*C]*R, yang berkongsi satu senarai dalaman untuk setiap baris. Kod ini menunjukkan pembetulannya.
# 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 Kamus dan Set
Pemahaman kamus dan set menggunakan tanda kurung berombak: {k: v for ...} untuk kamus, dan {expr for ...} untuk set. Kedua-duanya boleh menapis, jadi anda boleh mengubah atau membuang pendua 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)Ungkapan Penjana: Cekap Memori
Bungkus pemahaman dalam () untuk mendapatkan penjana yang menghasilkan nilai satu demi satu, sekali gus menjimatkan memori. Berikan penjana itu terus kepada sum, max atau fungsi lain untuk jujukan 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 Fungsian
map menggunakan fungsi pada setiap item; filter mengekalkan item yang lulus ujian. Kedua-duanya malas, jadi bungkus dalam list() untuk melihat hasilnya. Pemahaman selalunya 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(): Memadankan Jujukan
zip memadankan dua jujukan dan berhenti pada jujukan yang lebih pendek — cara yang kemas untuk menggelung melalui dua senarai serentak. Helah zip(*matrix) mentransposkan senarai 2D. Lihat kodnya.
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 Berserta Nilai
enumerate memberikan (indeks, nilai) semasa anda menggelung — lebih kemas daripada range(len(lst)) dan bebas daripada kesilapan satu beza. Gunakan pilihan start untuk memulakan kiraan pada 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 Kunci
sorted mengembalikan senarai tersusun baharu dan menerima fungsi kunci untuk susunan tersuai. Isih berdasarkan panjang, medan tupel atau tanpa membezakan huruf besar dan kecil. Kod ini menunjukkan pengisihan berbilang 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 Kunci
min dan max juga menerima kunci, jadi anda boleh mendapatkan elemen dengan nilai terpetakan paling kecil atau paling besar dalam satu panggilan — seperti perkataan yang paling panjang. Lihat kodnya.
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 Semakan Henti Awal
any berhenti pada item pertama yang benar; all berhenti pada item pertama yang palsu. Kedua-duanya menggunakan henti awal, jadi apabila digabungkan dengan penjana, ia menguji syarat dengan pantas 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 matematik ini muncul di mana-mana: sum, abs dan divmod. divmod(a, b) mengembalikan hasil bahagi dan baki serentak — sesuai untuk mendapatkan 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]Semakan Pantas
Semakan pantas — mari lihat sejauh mana pemahaman dan fungsi terbina dalam telah anda kuasai. Satu soalan sahaja, anda pasti boleh melakukannya. ✅
Imbas Kembali Pelajaran
Imbas kembali: pemahaman menukar gelung kepada kod satu baris, fungsi terbina dalam seperti zip dan sorted menerima fungsi kunci, dan penjana menjimatkan memori untuk kerja satu laluan.
Pelajari Persediaan Temu Duga Pengaturcaraan dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 90
- Pelajaran
- 360
Soalan Lazim
Adakah pelajaran “Pemahaman dan Fungsi Terbina Dalam” percuma?
Ya — teks penuh “Pemahaman dan Fungsi Terbina Dalam” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Persediaan Temu Duga Pengaturcaraan, tingkat taraf kepada CoddyKit PRO. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pemahaman dan Fungsi Terbina Dalam”?
Tulis penyelesaian ringkas menggunakan pemahaman senarai, kamus dan set, map, filter, zip, enumerate serta sorted dengan fungsi key. Anda berlatih Persediaan Temu Duga Pengaturcaraan menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Persediaan Temu Duga Pengaturcaraan?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Persediaan Temu Duga Pengaturcaraan di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Pemahaman dan Fungsi Terbina Dalam” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Persediaan Temu Duga Pengaturcaraan ini?
Ya. Setiap pelajaran Persediaan Temu Duga Pengaturcaraan menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Senarai, Tuple dan Pemotongan
- Kamus dan Set dalam Python
- Pemahaman dan Fungsi Terbina Dalam
- Fungsi, Penutupan dan Lambda