CodeBlanks Logo Icon CodeBlanks

Arama ve filtreleme

List comprehension ile arama ve filtreleme yazarsın.

Liste üretimi ile arama

Belirli bir yazarın yazılarını bulmak için liste üretimi (list comprehension) kullanırsın: [p for p in self.posts if p.author == author]. Bu tek satır, koşulu sağlayan yazıları yeni bir liste olarak verir.

search_by_author metodu bu satırı doğrudan döndürür. Dışarıdan blog.search_by_author("Ayşe") çağrısı yaparsın; sonuç bir liste olduğu için len(...) ile kaç yazı geldiğini görebilirsin.

Uygulama search_by_author metodunu ekle

Üstteki Blog sınıfına def search_by_author(self, author): metodunu ekle. Gövdesinde return [p for p in self.posts if p.author == author] yaz. Sonra bir blog oluştur, üç yazı ekle (ikisinin yazarı "Ayşe" olsun), results = blog.search_by_author("Ayşe") ile ara ve print(len(results)) ile sonucu yazdır.

Başlangıç kodu

main.py
from dataclasses import dataclass, field

@dataclass
class Post:
    title: str = ""
    content: str = ""
    author: str = ""
    comments: list = field(default_factory=list)

    def add_comment(self, comment):
        self.comments.append(comment)

@dataclass
class Comment:
    author: str = ""
    text: str = ""

@dataclass
class Blog:
    posts: list = field(default_factory=list)

    def add_post(self, post):
        self.posts.append(post)

# Blog sınıfına search_by_author metodu ekle

# Bir blog oluştur, üç yazı ekle (ikisi Ayşe), ara ve sayıyı yazdır

Örnek çözüm

main.py
from dataclasses import dataclass, field

@dataclass
class Post:
    title: str = ""
    content: str = ""
    author: str = ""
    comments: list = field(default_factory=list)

    def add_comment(self, comment):
        self.comments.append(comment)

@dataclass
class Comment:
    author: str = ""
    text: str = ""

@dataclass
class Blog:
    posts: list = field(default_factory=list)

    def add_post(self, post):
        self.posts.append(post)

    def search_by_author(self, author):
        return [p for p in self.posts if p.author == author]

blog = Blog()
blog.add_post(Post(title="Bir", author="Ayşe"))
blog.add_post(Post(title="İki", author="Ali"))
blog.add_post(Post(title="Üç", author="Ayşe"))
results = blog.search_by_author("Ayşe")
print(len(results))

Beklenen çıktı

2

Filtre örüntüsü

Liste üretiminin [öğe for öğe in dizi if koşul] biçimi, bir filtre örüntüsüdür: koşul doğruysa öğe yeni listeye alınır, değilse atlanır. Bu yapı, döngü ve koşul yazmaktan kısadır.

Aynı örüntüyü başka alanlarda da kullanırsın: uzunluğa göre seçme (if len(p.title) > 5), tarih aralığına göre süzme, içerik arama (if "python" in p.content). Koşulu değiştirirsin; yapı aynı kalır.

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 [p for p in posts if p.author == a] ne üretir?

  • Tek bir değeri döndürür
  • Sözlük oluşturur
  • Demet (tuple) döndürür
  • Koşulu sağlayanların listesini verir Doğru cevap

Açıklama: Liste üretimi koşulu sağlayan öğelerden yeni bir liste üretir.

2 Liste üretimi parçalarını eşleştir

Kavram Anlamı
for Döngü bağlacı
if Koşul bağlacı
return Sonuç verme
in İçinde arama

3 Filtre koşulunu tamamla

Soru
return [p for p in self.posts if p.author == ____]
Cevap
return [p for p in self.posts if p.author == author]

Açıklama: Metodun author parametresi ile karşılaştırma yapılır.

Orta seviye bölümündeki tüm dersler