Python Liste Üreteci (List Comprehension): Sözdizimi, Örnekler ve Kaçınılacak Durumlar

  1. Ana Sayfa
  2. Blog
  3. Yazılım Geliştirme
Yazılım Geliştirme

Python List Comprehension: Sözdizimi, Örnekler ve Kaçınılacak Durumlar

Python list comprehension yapısını adım adım öğrenin: listeleri tek satırda oluşturun, filtreleyin ve dönüştürün, döngülerle karşılaştırılmış ölçülen süreleri görün ve düz bir for döngüsünün ne zaman daha okunaklı olduğunu bilin.

7 dk okuma
Python List Comprehension: Sözdizimi, Örnekler ve Kaçınılacak Durumlar
Öne çıkanlar
  • Kalıp şudur: [ifade for öğe in yinelenebilir if koşul].
  • Sondaki sade if filtreler; baştaki if-else iki değer arasından seçer.
  • Testimizde comprehension, append kullanan döngüden yaklaşık %37 daha hızlıydı.
  • Çok büyük veride üreteç ifadesine, mantık birden fazla net adım gerektirdiğinde ise normal döngüye geçin.

Bir Python list comprehension, herhangi bir yinelenebilir nesneden tek ve okunaklı bir satırda yeni liste oluşturur. Boş bir liste yapıp döngüyle gezmek ve append çağırmak yerine istediğiniz sonucu tarif edersiniz.

Bu rehber temel kalıptan filtrelere, iç içe döngülere ve kendi ölçtüğümüz sürelere kadar ilerler. Python sizin için yeniyse önce yeni başlayanlar için Python eğitimimize (İngilizce) göz atın ve sanal ortam rehberiyle (İngilizce) ortamınızı düzenli tutun.

Python list comprehension sözdizimi

Soldan sağa okuyun: ifade her yeni öğenin nasıl göründüğünü, for kısmı öğelerin nereden geldiğini söyler.

squares = [x * x for x in range(6)]
print(squares)          # [0, 1, 4, 9, 16, 25]

names = [" Hi ", "  QA "]
clean = [n.strip().lower() for n in names]
print(clean)            # ['hi', 'qa']

Aynı sonuç döngüyle üç satır daha fazla yer kaplar. Satır okunaklı kaldığı sürece bu kazanç işin özüdür.

Öğeleri koşulla filtreleme

Koşulu geçen öğeleri tutmak için döngüden sonra bir if ekleyin.

evens = [x for x in range(10) if x % 2 == 0]
print(evens)            # [0, 2, 4, 6, 8]

if-else ile Python list comprehension

Her öğe için bir değer istediğinizde if-else ifadesini for öncesine koyun. Yeni başlayanlar en çok burada hata yapar, çünkü sonda duran else sözdizimi hatasıdır.

labels = ["even" if x % 2 == 0 else "odd" for x in range(4)]
print(labels)           # ['even', 'odd', 'even', 'odd']

Pratik kural: Sondaki if öğeleri eler, baştaki if-else öğeleri değiştirir. if-else ile liste uzunluğu aynı kalır.

İç içe döngüler ve düzleştirme

Birden fazla for ifadesi, iç içe döngülerle aynı sırada okunur. Liste listesini düzleştirmek veya çiftler oluşturmak için kullanın.

matrix = [[1, 2, 3], [4, 5, 6]]
flat = [n for row in matrix for n in row]
print(flat)             # [1, 2, 3, 4, 5, 6]

pairs = [(x, y) for x in range(1, 3) for y in "ab"]
print(pairs)            # [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]

Matrisi devirmek (transpoze) için bir comprehension’ı bir diğerinin içine koyun: [[r[i] for r in matrix] for i in range(3)] sonucu [[1, 4], [2, 5], [3, 6]] verir. Okunabilirlik düşmeden önceki pratik sınır iki seviyedir.

Sözlük, küme ve üreteç biçimleri

Parantezleri değiştirin, aynı fikir başka türler üretir.

lengths = {w: len(w) for w in ["pip", "venv", "uv"]}   # {'pip': 3, 'venv': 4, 'uv': 2}
unique  = {len(w) for w in ["pip", "venv", "uv", "git"]}  # {2, 3, 4}
total   = sum(x * x for x in range(1_000_000))           # generator, no list

Türlerin kendisini liste, demet, küme ve sözlük rehberimizde (İngilizce) karşılaştırabilirsiniz.

Hız ve bellek: ölçtüklerimiz

Her sürümü Python 3.13.6 üzerinde 100.000 tam sayıyla zamanladık ve beş çalıştırmanın en iyisini aldık. Sizin sayılarınız farklı olacaktır ama sıralama sabittir.

GörevSüre
append ile döngü (her öğeyi ikiye katla)5,18 ms
List comprehension (her öğeyi ikiye katla)3,25 ms
list(map(lambda ...))6,50 ms
Çiftleri döngüyle filtrele3,62 ms
Çiftleri comprehension ile filtrele3,43 ms

Comprehension, append döngüsünü açıkça geride bırakır; ancak zamanın çoğu koşula gidiyorsa fark azalır. Bellekte, iki katına çıkarılmış bir milyon tam sayılık liste yaklaşık 8,4 MB tuttu; eşdeğer üreteç nesnesi ise değerleri tek tek ürettiği için 200 bayttı.

List comprehension ne zaman kullanılmaz

  • Yalnızca yan etkiye ihtiyacınız var (yazdırma ya da kaydetme gibi). Normal döngü kullanın; comprehension işe yaramaz bir liste oluşturur.
  • Mantık birkaç adımdan oluşuyor. İkinci bir değişken ya da try gerekiyorsa döngü veya küçük bir fonksiyon yazın.
  • Veri çok büyük. Python’un tüm listeyi bellekte tutmaması için üreteç ifadesi kullanın.
  • İkiden fazla for ifadesi gerekiyor. Sonraki okuyucu için adlandırılmış adımlara bölün.

Son sözler

Kısa bir satır tam olarak ne demek istediğinizi söylüyorsa Python list comprehension kullanın, söylemiyorsa döngü kullanın. Temel kalıpla başlayın, bir filtre ekleyin, sonra sıra doğal gelene kadar if-else biçimini çalışın.

Sık sorulan sorular

Python’da list comprehension nedir?

Yinelenebilir bir nesnenin her öğesine bir ifade uygulayarak liste oluşturmanın kısa yoludur; isteğe bağlı bir koşulla filtreleme de yapılabilir.

List comprehension içinde if-else nasıl kullanılır?

Koşullu ifadeyi for ifadesinden önce yazın, örneğin ["even" if x % 2 == 0 else "odd" for x in nums]. Basit filtre, döngüden sonra tek bir if kullanır.

List comprehension for döngüsünden daha hızlı mıdır?

Genellikle evet. 100.000 öğelik testimizde append kullanan döngüden yaklaşık %37 daha hızlıydı, ancak önce okunabilirlik belirleyici olmalı.

List comprehension ile üreteç ifadesi arasındaki fark nedir?

List comprehension tüm listeyi bir seferde bellekte oluşturur. Üreteç ifadesi yuvarlak parantez kullanır ve her seferinde tek değer üretir; büyük veride bellek tasarrufu sağlar.

List comprehension iç içe kullanılabilir mi?

Evet, matrisi düzleştirmek veya devirmek için. İki seviyede kalın; okuması zorlaşırsa döngüye geçin.

Öğrenmeye devam edin (İngilizce makaleler)

Stack Quora ile çalışın

Test, WordPress veya SEO konusunda yardım mı lazım?

Ekiplerin daha iyi yazılım çıkarmasına ve sitelerini büyütmesine yardımcı oluyoruz. Üzerinde çalıştığınız konuyu anlatın, net bir sonraki adım önerelim.

Okumaya devam et

Daha fazla kılavuz test, yapay zeka ve modern geliştirme

Bu makaleyi beğendiniz mi? Bir konu seçin ve doğrudan en yeni eğitimlerimize geçin.

Yapay zekâ

Yapay Zeka Halüsinasyonları Açıklandı: Dil Modelleri Neden İşleri Düzeltiyor ve Nasıl Azaltılabilir?

Yapay zeka halüsinasyonları açıkladı: ne olduklarını, dil modellerinin bunları neden ürettiğini, yaygın türlerini, temellendirme ve yönlendirmelerle…

Makaleyi okuyun →
DevOps

Açıklanan Ortam Değişkenleri: .env Dosyaları, Sırlar ve Yapılandırma Doğru Yapıldı

Çalıştırdığımız Python örnekleriyle açıklanan ortam değişkenleri: bunları okumak ve ayarlamak, neden her değerin bir dize olduğu, .env dosyaları, sü…

Makaleyi okuyun →
Yazılım geliştirme

API Hız Sınırlamasının Açıklaması: Algoritmalar, Başlıklar ve 429 Hatalarının Ele Alınması

API hızı sınırlaması, çalıştırdığımız bir simülasyonla açıklanmıştır: belirteç kümesi, sabit pencere, kayan pencere, 429 yanıt, hız sınırı başlıklar…

Makaleyi okuyun →
Test otomasyonu

Python'da alay etme: Unittest.mock, patch ve Testleri Yalan Yapan Hatalar

Unittest.mock ile Python'da alay etme, test edildi: Sahte ve dönüş_değeri, yan_etki, bir adın kullanıldığı yerde yama uygulama, spesifikasyon ve oto…

Makaleyi okuyun →
Yazılım testi

Kod Kapsamının Açıklaması: Hat ve Şube Kapsamı ve %100'ün Gerçek Anlamı

Kod kapsamı gerçek bir kapsama.py çalışmasıyla açıklanmıştır: hat, şube ve durum kapsamı, bir raporun okunması, %100 kapsamın neden hâlâ hataları ka…

Makaleyi okuyun →
Veritabanları ve SQL

SQL'de DELETE vs TRUNCATE vs DROP: Farklılıklar, Geri Alma ve Her Biri Ne Zaman Kullanılmalı

DELETE vs TRUNCATE vs DROP test edilmiş SQL ile açıklandı: her birinin neyi kaldırdığı, geri aldığı, tetiklediği, kimlik sıfırlaması, hızı ve Postgr…

Makaleyi okuyun →
Veritabanları ve SQL

Açıklanan SQL Görünümleri: Örneklerle Tuzakları Oluşturun, Kullanın ve Önleyin

Çalıştırdığımız sorgularla açıklanan SQL görünümleri: görünüm oluşturma, canlı sonuçlar, sütunları gizleme, performans, güncellenebilir ve gerçekleş…

Makaleyi okuyun →
Yazılım geliştirme

TypeScript Arayüzü ve Tür: Gerçek Farklılıklar, Derleyiciyle Test Edildi

TypeScript arayüzü ve türü, gerçek derleyiciyle kontrol edildi: her ikisinin de yapabileceği, yalnızca birinin yapabileceği, bildirim birleştirme, g…

Makaleyi okuyun →
Yazılım geliştirme

Python *args ve **kwargs'ın Açıklaması: Açık Örneklerle Esnek Fonksiyonlar

Python *args ve **kwargs çalıştırdığımız kodla açıklanmıştır: paketleme ve paketten çıkarma, parametre sırası, yalnızca anahtar kelime ve yalnızca k…

Makaleyi okuyun →
Yazılım geliştirme

Python Lambda İşlevleri: Söz Dizimi, Gerçek Kullanımlar ve Ne Zaman Kullanılmaması Gerektiği

Çalıştırdığımız kodla açıklanan Python lambda işlevleri: sözdizimi, anahtarla sıralama, harita ve filtre, kapatmalar, geç bağlama tuzağı ve normal b…

Makaleyi okuyun →
Yapay zekâ

Yapay Zeka Ajanları Nelerdir? Çalıştırabileceğiniz Basit Bir Aracı Döngüsüyle Nasıl Çalışırlar?

Yapay zeka ajanları nedir? Aracı döngüsüne, araçlara, belleğe ve korkuluklara ilişkin basit bir kılavuz, çalıştırdığımız küçük bir Python döngüsü, g…

Makaleyi okuyun →
DevOps

İzleme ve Gözlemlenebilirlik: Günlükler, Metrikler ve İzlerle Gerçek Fark

İzleme ve gözlemlenebilirliğin açıklanması: bilinen ve bilinmeyen arızalar, günlükler, ölçümler ve izler, ödeme olayının gözden geçirilmesi, altın s…

Makaleyi okuyun →
DevOps

Docker Birimleri ve Bağlama Bağlantıları: Konteyner Verilerini Doğru Şekilde Kalıcılaştırın

Docker birimleri ile bağlama bağlamaları arasındaki karşılaştırma açıklandı: kapsayıcı verilerinin neden kaybolduğu, adlandırılmış birimler, bağlama…

Makaleyi okuyun →
Test otomasyonu

TDD ve BDD: Temel Farklılıklar, Her İki Şekilde Geliştirilmiş Bir Özellik ve Her Birinin Ne Zaman Kullanılacağı

TDD ve BDD, her iki yönde de oluşturulmuş bir indirim özelliğiyle açıklandı: çalıştırdığımız kodla kırmızı-yeşil-refactor, Verilen-Ne Zaman-O Zaman …

Makaleyi okuyun →
Yazılım geliştirme

Git merge vs rebase: farklar, örnekler ve hangisi ne zaman kullanılır

Git merge vs rebase; gerçek log çıktısı, karşılaştırma tablosu, rebase'in altın kuralı ve güvenli bir ekip iş akışıyla anlatılıyor.

Makaleyi okuyun →
Yazılım geliştirme

Python Liste Üreteci (List Comprehension): Sözdizimi, Örnekler ve Kaçınılacak Durumlar

Python list comprehension anlatımı: sözdizimi, filtreleme, if-else, iç içe döngüler, ölçülmüş süreler ve düz for döngüsünün daha iyi olduğu durumlar.

Makaleyi okuyun →
Veritabanları ve SQL

SQL JOIN Örneklerle Açıklama (Inner, Left, Right, Full)

SQL JOIN'leri örnek tablolar ve sorgularla adım adım öğrenin: INNER, LEFT, RIGHT, FULL, CROSS ve SELF; yaygın hatalar ve performans ipuçları.

Makaleyi okuyun →