Saya kebetulan menemukan diri saya memiliki kebutuhan penyaringan dasar: Saya punya daftar dan saya harus menyaringnya dengan atribut item.
Kode saya terlihat seperti ini:
my_list = [x for x in my_list if x.attribute == value]
Tapi kemudian saya berpikir, bukankah lebih baik menulis seperti ini?
my_list = filter(lambda x: x.attribute == value, my_list)
Ini lebih mudah dibaca, dan jika diperlukan untuk kinerja lambda dapat diambil untuk mendapatkan sesuatu.
Pertanyaannya adalah: apakah ada peringatan dalam menggunakan cara kedua? Adakah perbedaan kinerja? Apakah saya kehilangan Pythonic Way ™ sepenuhnya dan harus melakukannya dengan cara lain (seperti menggunakan itemgetter bukan lambda)?
filteradalah objek generator filter bukan daftar.
filterlebih mudah dibaca. Ketika Anda memiliki ekspresi sederhana yang dapat digunakan apa adanya di listcomp, tetapi harus dibungkus dengan lambda (atau dibangun di luar daripartialatauoperatorfungsi, dll) untuk dilewatifilter, saat itulah Listcomps menang.