Python - List Comprehension: A Friendly Guide for Beginners

Hai di sana, yang berhasrat menjadi programmer Python! Saya sangat gembira untuk menjadi pemandu anda dalam perjalanan yang menarik ini ke dunia List Comprehensions. Sebagai seseorang yang telah mengajar Python selama beberapa tahun, saya boleh memberitahu anda bahawa topik ini adalah seperti untuk belajar superpower rahsia untuk kod anda. Jadi, mari kita melompat masuk dan membuka fitur yang fantastik ini bersama-sama!

Python - List Comprehension

List Comprehension di Python

Bayangkan anda berada di atas toko buah, dan anda perlu untuk memilih semua buah epal merah dari rak besar yang berisi buah-buahan campuran. Itu adalah esen yang sama seperti apa yang list comprehension lakukan di Python – ia membantu anda membuat senarai baru dengan memilih item tertentu dari senarai yang ada, semua di atas satu baris kod yang rapi!

Mari kita mulai dengan contoh yang sederhana:

fruits = ["apple", "banana", "cherry", "date", "elderberry"]
long_fruits = [fruit for fruit in fruits if len(fruit) > 5]
print(long_fruits)

Output:

['banana', 'cherry', 'elderberry']

Dalam contoh ini, kita membuat senarai baru long_fruits yang mengandungi hanya buah-buahan dengan nama lebih panjang daripada 5 karakter. Mari kita pecahkan itu:

  1. fruit for fruit in fruits: Bagian ini adalah seperti untuk mengatakan "untuk setiap buah di atas rak buah kami"
  2. if len(fruit) > 5: Ini adalah kondisi kita, seperti untuk mengatakan "tetapi hanya jika nama buah lebih panjang daripada 5 huruf"
  3. Semua itu di atas kurungan buka [], yang memberitahu Python untuk membuat senarai baru dengan hasilnya

Ia seperti sihir, bukan? Dengan hanya satu baris, kita telah melakukan apa yang biasanya memerlukan beberapa baris menggunakan loop for tradisional.

List Comprehensions dan Lambda

Sekarang, mari kita naikkan level sedikit. Kadang-kadang, kita ingin melakukan lebih daripada hanya memilih item; kita juga ingin mengubah mereka. Itu adalah di mana fungsi lambda menjadi berguna. Pikirkan lambda sebagai fungsi kecil yang kita boleh gunakan atas rakit.

Inilah contoh:

numbers = [1, 2, 3, 4, 5]
squared_numbers = [lambda x: x**2 for x in numbers]
print([func() for func in squared_numbers])

Output:

[1, 4, 9, 16, 25]

Dalam contoh ini, kita membuat senarai fungsi lambda yang kuadratkan setiap nombor. Kemudian, kita memanggil setiap salah satu fungsi ini untuk mendapatkan hasil akhir kita. Ia seperti memiliki rakit penyusun mini, setiap satu dijadwalkan untuk kuadratkan nombor!

Nested Loops di Python List Comprehension

Kadang-kadang, hidup menjadi lebih rumit, dan begitu juga dengan kod kita. Apa jika kita perlu untuk bekerja dengan beberapa senarai sekaligus? Itu adalah di mana nested loops di list comprehensions menjadi berguna.

Katakanlah kita sedang merancang pejabat dan kita ingin untuk mengaitkan buah-buahan yang berlainan dengan minuman yang berlainan:

fruits = ["apple", "banana", "cherry"]
drinks = ["juice", "smoothie", "cocktail"]
combinations = [(fruit, drink) for fruit in fruits for drink in drinks]
print(combinations)

Output:

[('apple', 'juice'), ('apple', 'smoothie'), ('apple', 'cocktail'),
('banana', 'juice'), ('banana', 'smoothie'), ('banana', 'cocktail'),
('cherry', 'juice'), ('cherry', 'smoothie'), ('cherry', 'cocktail')]

Comprehension ini adalah seperti memiliki dua rakit berputar, satu untuk buah-buahan dan satu untuk minuman. Untuk setiap buah, kita mengputarkan rakit minuman sepenuhnya, menciptakan semua kombinasi yang mungkin. Ia adalah mimpi perancang pejabat!

Conditionals di Python List Comprehension

Sekarang, mari kita tambahkan beberapa pengambilan keputusan ke list comprehensions kita. Kita boleh menggunakan if-else untuk membuat pemilihan kita lebih spesifik.

Bayangkan kita sedang menggred kan test, dan kita ingin untuk mengkategorikan markah sebagai 'lulus' atau 'gagal':

scores = [65, 80, 90, 45, 75, 55]
results = ['lulus' if score >= 60 else 'gagal' for score in scores]
print(results)

Output:

['lulus', 'lulus', 'lulus', 'gagal', 'lulus', 'gagal']

Di sini, kita menggunakan operator ternary (x if condition else y) di atas list comprehension kita. Ia seperti memiliki hakim kecil untuk setiap markah, memutuskan sama ada ia adalah lulus atau gagal.

List Comprehensions vs Loop For

Sekarang, anda mungkin berfikir, "Mengapa harus masalah dengan list comprehensions apabila kita ada loop for yang klasik?" Pertanyaan yang bagus! Mari kita bandingkan mereka:

# Menggunakan loop for
squares_loop = []
for i in range(10):
squares_loop.append(i**2)

# Menggunakan list comprehension
squares_comp = [i**2 for i in range(10)]

print("Hasil loop for:", squares_loop)
print("Hasil list comprehension:", squares_comp)

Output:

Hasil loop for: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Hasil list comprehension: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Seperti yang dapat dilihat, kedua-dua metode menghasilkan hasil yang sama. Tetapi list comprehension melakukan itu di atas satu baris, membuat kod kita lebih ringkas dan sering kali lebih mudah dibaca sekali anda bias dengan sintaksnya.

Kelebihan List Comprehension

Mari kita wrap up dengan membincangkan mengapa list comprehensions adalah sangat hebat:

  1. Keterbacaan: Sekali anda bias dengan mereka, list comprehensions sering kali lebih mudah dibaca secara sekilas.
  2. Ringkasan: Mereka membolehkan anda untuk menulis di atas satu baris apa yang biasanya memerlukan 3-5 baris.
  3. Kecepatan: Dalam banyak kasus, list comprehensions adalah lebih cepat daripada loop for yang setara.
  4. Fleksibilitas: Mereka boleh mengikutsertakan kondisi, nested loops, dan juga pemanggilan fungsi.

Berikut adalah tabel yang menjelaskan metode yang kita telah covr:

Method Description Example
Basic List Comprehension Buat senarai baru berdasarkan senarai yang ada [x for x in range(10)]
List Comprehension with Condition Filter item sementara membuat senarai baru [x for x in range(10) if x % 2 == 0]
List Comprehension with Lambda Gunakan fungsi kecil di atas comprehension [(lambda x: x**2)(x) for x in range(5)]
Nested List Comprehension Bekerja dengan beberapa senarai sekaligus [(x, y) for x in [1,2,3] for y in [3,1,4]]
List Comprehension with If-Else Buat keputusan untuk setiap item ['even' if x % 2 == 0 else 'odd' for x in range(5)]

Ingat, seperti setiap alat yang kuat, list comprehensions harus digunakan dengan bijak. Walaupun mereka adalah bagus untuk banyak situasi, kadang-kadang loop for biasa mungkin lebih sesuai, khususnya untuk operasi yang lebih kompleks atau apabila keterbacaan adalah kritikal.

Jadi, itu adalah untuk anda, pelajar yang dihargai! Anda baru saja membuka superpower Python baru. List comprehensions mungkin terasa agak sulit pada awalnya, tetapi dengan latihan, mereka akan menjadi wajah kedua. Baru-baru ini, anda akan menulis kod yang elegan dan efisien yang akan membuat programmer lain berkata, "Wah, bagaimana kamu melakukan itu?" Teruskan untuk berlatih, tetap curious, dan happy coding!

Credits: Image by storyset