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)?
filterbir liste değil, bir filtre üreteci nesnesi olduğu söylenmelidir .
filterdaha 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şpartialveyaoperatorfonksiyonlar, vb.)filterİçine sarılması gereken basit bir ifadeniz varsa, o zaman listcomps kazanır.