Python'un filter() fonksiyonunu kullanarak listelerden veya diğer yinelenebilirlerden öğeleri nasıl çıkaracağınızı öğrenin. filter ile benzer Python araçları arasındaki temel farkları anlayın.
Filtreleme, Python’daki en yaygın görevlerden biridir; bu yüzden Python bunu kolaylaştırır. Verileri filtrelemenin en basit yollarından biri, yerleşik filter() fonksiyonunu kullanmaktır. Adının da açıkça belirttiği gibi, filter() yalnızca belirli bir koşulu (veya koşulları) karşılayan öğeleri çekmenize olanak tanır.
Bu rehber, nasıl çalıştığını, ne zaman kullanılacağını ve diğer filtreleme araçlarıyla nasıl karşılaştırıldığını adım adım anlatır. Keyifli okumalar!
Python filter() Ne Yapar
filter(), bir liste, demet (tuple) veya herhangi bir yinelenebilirden (iterable) öğeleri çeker; ancak yalnızca testinizi geçerlerse. Her öğeyi alan ve True veya False döndüren bir fonksiyon sağlarsınız (buna bazen öngörü [predicate] dendiğini de gördüm). Test geçerse (yani fonksiyonunuz True dönerse) filter() onu tutar. Aksi halde öğeyi atlar. Oldukça kendini anlatan bir yapı, o halde devam edelim.
function: Her bir öğeye uygulamak istediğiniz testi belirtir. Tek argüman almalı ve True veya False döndürmelidir.
iterable: Liste, demet, dize veya üzerinden döngü kurulabilen herhangi bir nesneyi sağlar.
filter() çağırdığınızda, doğrudan bir liste veya demet değil, özel bir filter nesnesi döner. Filtrelenmiş sonuçlarla gerçekten çalışmak için genellikle çıktıyı bir listeye veya demete sararsınız. Bu tasarım tercihi filter()’ı verimli kılar, ancak kod yazarken akılda tutulması gereken bir noktadır.
Python filter() Örnekleri
Biraz pratik yapalım.
Özel bir fonksiyonla Python filter()
Kendi yazdığımız bir fonksiyonla filter() kullanalım.
Diyelim ki bir listeden yalnızca çift sayıları tutmak istiyorsunuz:
defis_even(num):return num %2==0
numbers =[1,2,3,4,5,6]
result =filter(is_even, numbers)print(list(result))Altyapı:
is_even fonksiyonunun bir sayının 2’ye bölünüp bölünmediğini nasıl kontrol ettiğine dikkat edin. filter(), her öğeyi test etmek ve testimizi geçenleri tutmak için özel fonksiyonumuzu kullanır.
Lambda fonksiyonlarıyla Python filter()
Elbette, her filtre için tam bir fonksiyon tanımı gerekmez. Bazen filtreleme kuralınız o kadar basit veya tek bir yere özgüdür ki, adlandırılmış bir fonksiyon tanımlamak gereksiz olur.
Aynı çift sayı örneği, ancak bu kez kısa ve yerinde bir test için bir lambda kullanarak:
numbers =[1,2,3,4,5,6]
result =filter(lambda x: x %2==0, numbers)print(list(result))Altyapı:
Öncekiyle aynı çıktıyı alırsınız.
filter() ile lambda kullanmak, kodunuzu kısa ve odaklı tutmak istediğinizde özellikle yaygındır. Tek seferlik filtreleme görevleri için çok uygundur; kuralınızı ihtiyacınız olan yerde ifade etmenizi sağlar.
Fonksiyon olarak None ile Python filter()
Bazen boş veya yalancı (falsey) değerleri filter() ile ayıklamak istersiniz. 0, boş dizeler, None veya False gibi; ve bunu özel bir fonksiyon yazmadan yapmak isteriz.
Python bunun için bir püf noktası sunar: filter() içinde fonksiyon argümanını None yaparsanız, filter() Python’un False kabul ettiği tüm öğeleri otomatik olarak kaldırır.
Örnek:
items =[0,1,'','hello',[],[2,3],None,False,True]
result =filter(None, items)print(list(result))Altyapı:
Şimdi filter()’ı pratik, günlük bir probleme uygulayalım. Elinizde bir kelime listesi olduğunu ve yalnızca ‘a’ ile başlayanları istediğinizi varsayalım. Metin işlerken bu tür hedefli filtreleme sık sık karşınıza çıkar.
words =['apple','banana','apricot','cherry','avocado']
result =filter(lambda word: word.startswith('a'), words)print(list(result))Altyapı:
Bazen filtreleme ölçütleriniz daha karmaşık hale gelir. Ya birkaç koşulu birden sağlayan öğelere ihtiyacınız olursa? Bunu bir lambda ile şöyle yapabilirsiniz. Bu örnekte hem çift hem de 10’dan büyük sayıları buluyoruz.
numbers =[4,10,12,15,20,23,28]
result =filter(lambda x: x %2==0and x >10, numbers)print(list(result))Altyapı:
(Daha da fazla koşul olsaydı, açıklık için lambdadan adlandırılmış bir fonksiyona geçmeyi düşünürdüm.)
filter() ve Liste Üretimi (List Comprehension)
Liste üretimleri de öğe seçmenin popüler bir yoludur. Her iki yaklaşım da verileri filtrelemenize olanak tanır, ancak her birinin kendine özgü bir tarzı vardır.
İşte çift sayı örneği yine, bu kez bir liste üretimi kullanarak:
numbers =[1,2,3,4,5,6]
result =[x for x in numbers if x %2==0]print(result)Altyapı:
Hem filter() hem de liste üretimleri işi görür. Liste üretimleri, özellikle kural kısa ve basitse, basit filtreler için genellikle daha okunabilirdir.
Öte yandan, filter() fonksiyonlarla zaten çalışıyorsanız veya birden çok işleme adımını art arda bağlamak istiyorsanız iyi çalışır.
Daha İleri Kullanımlar
Biraz daha ilginç örnekler bulalım:
Diğer yinelenebilirlerle filter()
Listelerde yaptığımız gibi, filter() herhangi bir yinelenebilirle de çalışır; demetler, kümeler — hatta üreteç ifadeleri ile. Bu iyi bir bilgidir çünkü verileriniz her zaman liste biçiminde olmayabilir.
Bir demeti nasıl filtreleyebileceğiniz şöyle:
numbers =(10,15,20,25,30)
result =filter(lambda x: x >20, numbers)print(tuple(result))Altyapı:
Az önce üreteçlerden de bahsetmiştim; tam olsun diye, üreteçlerle filtrelemeye bir örnek de göstereyim:
numbers =(x for x inrange(10))
result =filter(lambda x: x %2==0, numbers)print(list(result))Altyapı:
Bu bir üreteçtir çünkü şu satır: numbers = (x for x in range(10)) bir üreteç nesnesi oluşturur. (Tembeldir ve tüm değerleri bir kerede üretmez.)
Son satır: print(list(result)), tembel filter nesnesini bir listeye dönüştürerek değerlendirmeyi zorlar.
filter()’ı map() ile birleştirme
Hem filtrelemek hem de dönüştürmek istediğinizde ne olur? Örneğin, bir listedeki yalnızca çift sayıların karesini almak gibi?
Python, filter() ve map()’i birleştirmenize izin vererek bunu kolaylaştırır. Önce filter() istediğiniz öğeleri seçer, ardından map() her birine başka bir fonksiyon uygular.
Uygulaması şöyle:
numbers =[1,2,3,4,5,6]
evens =filter(lambda x: x %2==0, numbers)
squared =map(lambda x: x **2, evens)print(list(squared))Altyapı:
filter() ve map()’i ardışık bağlayarak, önce önem verdiğiniz öğeleri seçip sonra gerektiği gibi dönüştürerek net ve okunabilir veri işleme hatları kurabilirsiniz. Kendi çalışmalarınızda bu deseni kullanma fırsatları olacaktır.
Dikkat Edilmesi Gerekenler
filter() ne kadar kullanışlı olsa da, insanların yaptığı bazı hatalar vardır:
filter() bir liste değil, bir filter nesnesi döndürür. Sonuçları hemen görmeyi beklerseniz bu sizi şaşırtabilir. Sonuçları görmek veya yeniden kullanmak istiyorsanız her zaman bir listeye (veya demete) sarın.
filter() aynı anda yalnızca bir yinelenebilirle çalışır. Birden çok listeye dayalı olarak filtrelemek istiyorsanız, onları zip ile birleştirmeniz veya başka bir yaklaşım kullanmanız gerekir.
filter() tembeldir. Verileri, onu bir listeye veya demete dönüştürmeden ya da üzerinde döngü kurmadan gerçekten işlemez. Hata ayıklarken bu davranışı aklınızda bulundurun.
Sonuç
Gördüğünüz gibi, Python’un filter() fonksiyonu, yalnızca önemli olanları çekerek verileri hızlıca temizlemenin bir yolunu sunar. filter(), ister tek seferlik bir lambda yazıyor olun ister adlandırılmış bir fonksiyon bağlıyor olun, işinize yarar.
filter()’ı nasıl kullanacağınız konusunda net değilseniz veya bunun yeterince basit olduğunu düşünüp öğrenmeye devam etmek istiyorsanız, yardımcı olacak harika kaynaklarımız var. Şu beceri yolumuzu öneririm:Python Programming Fundamentals beceri yolu.
Yazar
Josef Waples
Bilimsel dergilerde yayımlanan araştırma makalelerine katkıları olan bir veri bilimi yazarı ve editörüyüm. Özellikle lineer cebir, istatistik, R ve benzeri konularla ilgileniyorum. Aynı zamanda epey satranç da oynarım!
Python Filter SSS
Python filter() fonksiyonu ne yapar?⌄
filter() fonksiyonu bir fonksiyon ve bir yinelenebilir alır ve yalnızca testi geçen öğelerle yeni bir yinelenebilir döndürür. Test fonksiyonu, tutmak istediğiniz öğeler için True, atlamak istedikleriniz için False döndürmelidir.
Neden filter() sonucunu list() veya tuple() ile sarmalamam gerekiyor?⌄
filter() bir yineleyici olan bir filter nesnesi döndürür. Filtrelenen sonuçları görüntülemek veya yeniden kullanmak için genellikle list() veya tuple() kullanarak bunu bir listeye ya da demete dönüştürürsünüz. Bu adım, yazdırma, hata ayıklama veya sonucu başka fonksiyonlara geçirmek için gereklidir.
Özel bir fonksiyon yazmadan filter() kullanabilir miyim?⌄
Evet. Kısa, tek seferlik testler için bir lambda fonksiyonu kullanabilir veya fonksiyon argümanı olarak None geçirerek 0, '', None ve False gibi tüm "yalancı" değerleri otomatik olarak kaldırabilirsiniz.
filter(), liste üretimlerine göre nasıl bir karşılaştırma sunar?⌄
Hem filter() hem de liste üretimleri verileri filtrelemenize izin verir, ancak basit koşullar için liste üretimleri genellikle daha okunabilirdir. filter(), mantığı fonksiyonlar aracılığıyla yeniden kullanırken veya map() gibi araçlarla zincirlerken kullanışlıdır.
filter() ile birden fazla koşul uygulayabilir miyim?⌄
Kesinlikle. Test fonksiyonunuz veya lambdanız içinde mantıksal operatörleri kullanarak birden çok koşulu birleştirebilirsiniz. Mantık karmaşıklaştığında, kodu okunabilir tutmak için çoğu zaman adlandırılmış bir fonksiyon kullanmak daha iyidir.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Filtreleme, Python’daki en yaygın görevlerden biridir; bu yüzden Python bunu kolaylaştırır. Verileri filtrelemenin en basit yollarından biri, yerleşik
filter()fonksiyonunu kullanmaktır. Adının da açıkça belirttiği gibi,filter()yalnızca belirli bir koşulu (veya koşulları) karşılayan öğeleri çekmenize olanak tanır.Bu rehber, nasıl çalıştığını, ne zaman kullanılacağını ve diğer filtreleme araçlarıyla nasıl karşılaştırıldığını adım adım anlatır. Keyifli okumalar!
Python filter() Ne Yapar
filter(), bir liste, demet (tuple) veya herhangi bir yinelenebilirden (iterable) öğeleri çeker; ancak yalnızca testinizi geçerlerse. Her öğeyi alan veTrueveyaFalsedöndüren bir fonksiyon sağlarsınız (buna bazen öngörü [predicate] dendiğini de gördüm). Test geçerse (yani fonksiyonunuzTruedönerse)filter()onu tutar. Aksi halde öğeyi atlar. Oldukça kendini anlatan bir yapı, o halde devam edelim.Python filter() Sözdizimi
Biçimi şöyle:
function: Her bir öğeye uygulamak istediğiniz testi belirtir. Tek argüman almalı veTrueveyaFalsedöndürmelidir.iterable: Liste, demet, dize veya üzerinden döngü kurulabilen herhangi bir nesneyi sağlar.filter()çağırdığınızda, doğrudan bir liste veya demet değil, özel bir filter nesnesi döner. Filtrelenmiş sonuçlarla gerçekten çalışmak için genellikle çıktıyı bir listeye veya demete sararsınız. Bu tasarım tercihifilter()’ı verimli kılar, ancak kod yazarken akılda tutulması gereken bir noktadır.Python filter() Örnekleri
Biraz pratik yapalım.
Özel bir fonksiyonla Python filter()
Kendi yazdığımız bir fonksiyonla
filter()kullanalım.Diyelim ki bir listeden yalnızca çift sayıları tutmak istiyorsunuz:
Bu şunu yazdırır:
is_evenfonksiyonunun bir sayının 2’ye bölünüp bölünmediğini nasıl kontrol ettiğine dikkat edin.filter(), her öğeyi test etmek ve testimizi geçenleri tutmak için özel fonksiyonumuzu kullanır.Lambda fonksiyonlarıyla Python filter()
Elbette, her filtre için tam bir fonksiyon tanımı gerekmez. Bazen filtreleme kuralınız o kadar basit veya tek bir yere özgüdür ki, adlandırılmış bir fonksiyon tanımlamak gereksiz olur.
Aynı çift sayı örneği, ancak bu kez kısa ve yerinde bir test için bir lambda kullanarak:
Öncekiyle aynı çıktıyı alırsınız.
filter()ile lambda kullanmak, kodunuzu kısa ve odaklı tutmak istediğinizde özellikle yaygındır. Tek seferlik filtreleme görevleri için çok uygundur; kuralınızı ihtiyacınız olan yerde ifade etmenizi sağlar.Fonksiyon olarak None ile Python filter()
Bazen boş veya yalancı (falsey) değerleri
filter()ile ayıklamak istersiniz.0, boş dizeler,NoneveyaFalsegibi; ve bunu özel bir fonksiyon yazmadan yapmak isteriz.Python bunun için bir püf noktası sunar:
filter()içinde fonksiyon argümanınıNoneyaparsanız,filter()Python’unFalsekabul ettiği tüm öğeleri otomatik olarak kaldırır.Örnek:
Bu şunu yazdırır:
Metin verilerini filtreleme
Şimdi
filter()’ı pratik, günlük bir probleme uygulayalım. Elinizde bir kelime listesi olduğunu ve yalnızca ‘a’ ile başlayanları istediğinizi varsayalım. Metin işlerken bu tür hedefli filtreleme sık sık karşınıza çıkar.Şunu alırsınız:
Birden çok koşulla filtreleme
Bazen filtreleme ölçütleriniz daha karmaşık hale gelir. Ya birkaç koşulu birden sağlayan öğelere ihtiyacınız olursa? Bunu bir lambda ile şöyle yapabilirsiniz. Bu örnekte hem çift hem de 10’dan büyük sayıları buluyoruz.
Bu şunu yazdırır:
(Daha da fazla koşul olsaydı, açıklık için lambdadan adlandırılmış bir fonksiyona geçmeyi düşünürdüm.)
filter() ve Liste Üretimi (List Comprehension)
Liste üretimleri de öğe seçmenin popüler bir yoludur. Her iki yaklaşım da verileri filtrelemenize olanak tanır, ancak her birinin kendine özgü bir tarzı vardır.
İşte çift sayı örneği yine, bu kez bir liste üretimi kullanarak:
Hem
filter()hem de liste üretimleri işi görür. Liste üretimleri, özellikle kural kısa ve basitse, basit filtreler için genellikle daha okunabilirdir.Öte yandan,
filter()fonksiyonlarla zaten çalışıyorsanız veya birden çok işleme adımını art arda bağlamak istiyorsanız iyi çalışır.Daha İleri Kullanımlar
Biraz daha ilginç örnekler bulalım:
Diğer yinelenebilirlerle filter()
Listelerde yaptığımız gibi,
filter()herhangi bir yinelenebilirle de çalışır; demetler, kümeler — hatta üreteç ifadeleri ile. Bu iyi bir bilgidir çünkü verileriniz her zaman liste biçiminde olmayabilir.Bir demeti nasıl filtreleyebileceğiniz şöyle:
Bu şunu yazdırır:
Sonuçları doğrudan kullanmanız gerektiğinde, filter nesnesini istediğiniz türe (liste, demet vb.) dönüştürmeyi unutmayın.
Az önce üreteçlerden de bahsetmiştim; tam olsun diye, üreteçlerle filtrelemeye bir örnek de göstereyim:
Bu bir üreteçtir çünkü şu satır:
numbers = (x for x in range(10))bir üreteç nesnesi oluşturur. (Tembeldir ve tüm değerleri bir kerede üretmez.)Son satır:
print(list(result)), tembel filter nesnesini bir listeye dönüştürerek değerlendirmeyi zorlar.filter()’ı map() ile birleştirme
Hem filtrelemek hem de dönüştürmek istediğinizde ne olur? Örneğin, bir listedeki yalnızca çift sayıların karesini almak gibi?
Python,
filter()vemap()’i birleştirmenize izin vererek bunu kolaylaştırır. Öncefilter()istediğiniz öğeleri seçer, ardındanmap()her birine başka bir fonksiyon uygular.Uygulaması şöyle:
Bu şunu yazdırır:
filter()vemap()’i ardışık bağlayarak, önce önem verdiğiniz öğeleri seçip sonra gerektiği gibi dönüştürerek net ve okunabilir veri işleme hatları kurabilirsiniz. Kendi çalışmalarınızda bu deseni kullanma fırsatları olacaktır.Dikkat Edilmesi Gerekenler
filter()ne kadar kullanışlı olsa da, insanların yaptığı bazı hatalar vardır:filter()bir liste değil, bir filter nesnesi döndürür. Sonuçları hemen görmeyi beklerseniz bu sizi şaşırtabilir. Sonuçları görmek veya yeniden kullanmak istiyorsanız her zaman bir listeye (veya demete) sarın.filter()aynı anda yalnızca bir yinelenebilirle çalışır. Birden çok listeye dayalı olarak filtrelemek istiyorsanız, onları zip ile birleştirmeniz veya başka bir yaklaşım kullanmanız gerekir.filter()tembeldir. Verileri, onu bir listeye veya demete dönüştürmeden ya da üzerinde döngü kurmadan gerçekten işlemez. Hata ayıklarken bu davranışı aklınızda bulundurun.Sonuç
Gördüğünüz gibi, Python’un
filter()fonksiyonu, yalnızca önemli olanları çekerek verileri hızlıca temizlemenin bir yolunu sunar.filter(), ister tek seferlik bir lambda yazıyor olun ister adlandırılmış bir fonksiyon bağlıyor olun, işinize yarar.filter()’ı nasıl kullanacağınız konusunda net değilseniz veya bunun yeterince basit olduğunu düşünüp öğrenmeye devam etmek istiyorsanız, yardımcı olacak harika kaynaklarımız var. Şu beceri yolumuzu öneririm: Python Programming Fundamentals beceri yolu.