Python
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.
Örnek çözümü göster
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))
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.
Kendini test et
-
[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
Cevabı göster
Koşulu sağlayanların listesini verir — Liste üretimi koşulu sağlayan öğelerden yeni bir liste üretir.
-
Liste üretimi parçalarını eşleştir
- for
- Döngü bağlacı
- if
- Koşul bağlacı
- return
- Sonuç verme
- in
- İçinde arama
-
Filtre koşulunu tamamla
return [p for p in self.posts if p.author == ____]
Cevabı göster
return [p for p in self.posts if p.author == author]
Sıradaki ders: Birleştirme