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)?
filter
adalah objek generator filter bukan daftar.
filter
lebih mudah dibaca. Ketika Anda memiliki ekspresi sederhana yang dapat digunakan apa adanya di listcomp, tetapi harus dibungkus dengan lambda (atau dibangun di luar daripartial
atauoperator
fungsi, dll) untuk dilewatifilter
, saat itulah Listcomps menang.