Python'da list comprehension ve generator expression kullanarak listeleri veya jeneratörleri (generator) hızlı bir şekilde oluşturabilirsiniz. Her ikisi de mevcut bir liste, dizi veya başka bir veri yapısından yeni bir liste veya jeneratör oluşturmanıza olanak tanır. İşte her iki yaklaşımın kullanımı:
- List Comprehension (Liste Anlama)
List comprehension, bir dizi veya liste oluşturmak için kullanılır ve sonuç bir liste döner. List comprehension'ın temel yapısı şu şekildedir:
new_list = [expression for item in iterable if condition]
- `expression`: Her öğe için yeni liste öğesini hesaplayan bir ifadedir.
- `item`: İterasyon sırasındaki mevcut öğeyi temsil eder.
- `iterable`: İşlem yapmak istediğiniz mevcut veri yapısını temsil eder (örneğin, liste, dizi, demet vb.).
- `condition` (isteğe bağlı): Her öğenin listeye eklenip eklenmeyeceğini kontrol eden bir koşuldur.
Örnek List Comprehension:
numbers = [1, 2, 3, 4, 5]
squared_numbers = [x**2 for x in numbers if x % 2 == 0]
print(squared_numbers) # Sonuç: [4, 16]
- Generator Expression (Jeneratör Anlama)
Generator expression, bir jeneratör oluşturmak için kullanılır ve sonuç bir jeneratör nesnesidir. Generator expression'ın temel yapısı şu şekildedir:
generator = (expression for item in iterable if condition)
Aynı tanımlar list comprehension için de geçerlidir, ancak bu durumda bir jeneratör oluşturulur. Jeneratörler, bellekte daha az yer kaplar ve öğeleri gerektiğinde tek tek üretir, bu nedenle büyük verilerle çalışırken daha verimli olabilirler.
Örnek Generator Expression:
numbers = [1, 2, 3, 4, 5]
squared_numbers_generator = (x**2 for x in numbers if x % 2 == 0)
for num in squared_numbers_generator:
print(num)
# Sonuç: 4 (satır atladı), 16
List comprehension ve generator expression, Python'da veri dönüşümü ve filtreleme işlemlerini hızlı ve okunabilir bir şekilde gerçekleştirmenize yardımcı olur. Hangi yaklaşımın kullanılacağı, ihtiyaçlarınıza ve çalıştığınız veri setinin boyutuna bağlı olarak değişebilir. Büyük veri kümeleriyle çalışırken jeneratörler daha avantajlı olabilir.