ฉันพบว่าตัวเองมีความจำเป็นในการกรองขั้นพื้นฐาน: ฉันมีรายการและฉันต้องกรองตามคุณลักษณะของรายการ
รหัสของฉันดูเหมือนว่านี้:
my_list = [x for x in my_list if x.attribute == value]
แต่ฉันก็คิดว่ามันคงจะดีกว่าถ้าเขียนมันแบบนี้?
my_list = filter(lambda x: x.attribute == value, my_list)
สามารถอ่านได้มากขึ้นและหากจำเป็นสำหรับการแสดงแลมบ์ดาสามารถนำออกมาเพื่อรับบางสิ่งได้
คำถามคือมีคำเตือนในการใช้วิธีที่สองหรือไม่? มีความแตกต่างด้านประสิทธิภาพหรือไม่ ฉันทำ Pythonic Way ™หายไปทั้งหมดและควรทำในวิธีอื่น (เช่นใช้ itemgetter แทนที่จะเป็นแลมบ์ดา) หรือไม่?
filter
วัตถุตัวสร้างตัวกรองไม่ใช่รายการ
filter
สามารถอ่านได้มากขึ้น เมื่อคุณมีการแสดงออกง่าย ๆ ที่สามารถใช้ตามที่เป็นอยู่ใน listcomp แต่จะต้องห่อในแลมบ์ดา (หรือสร้างจากpartial
หรือoperator
หน้าที่อื่น ๆ ที่คล้ายกันฯลฯ ) เพื่อส่งผ่านfilter
นั่นคือเมื่อ listcomps ชนะ