Kendimi temel bir filtreleme ihtiyacına sahip buldum: Bir listem var ve öğelerin bir özelliğine göre filtrelemek zorundayım.
Kodum şöyle görünüyordu:
my_list = [x for x in my_list if x.attribute == value]
Ama sonra düşündüm, böyle yazmak daha iyi olmaz mıydı?
my_list = filter(lambda x: x.attribute == value, my_list)
Daha okunabilir ve performans için gerekirse bir şey kazanmak için lambda çıkarılabilir.
Soru: İkinci yolu kullanırken herhangi bir uyarı var mı? Performans farkı var mı? Pythonic Way ™ 'i tamamen mi kaçırıyorum ve başka bir şekilde yapmalıyım (lambda yerine itemgetter kullanmak gibi)?
filter
bir liste değil, bir filtre üreteci nesnesi olduğu söylenmelidir .
filter
daha okunabilir olduğunu kabul edeceğini düşünüyorum . Listcomp'de olduğu gibi kullanılabilecek, ancak geçmek için bir lambda (veya benzer şekilde inşa edilmişpartial
veyaoperator
fonksiyonlar, vb.)filter
İçine sarılması gereken basit bir ifadeniz varsa, o zaman listcomps kazanır.