मुझे अपने आप को एक बुनियादी फ़िल्टरिंग आवश्यकता होने का पता चला: मेरे पास एक सूची है और मुझे इसे आइटम की एक विशेषता द्वारा फ़िल्टर करना होगा।
मेरा कोड इस तरह देखा:
my_list = [x for x in my_list if x.attribute == value]
लेकिन फिर मैंने सोचा, क्या इसे इस तरह लिखना बेहतर नहीं होगा?
my_list = filter(lambda x: x.attribute == value, my_list)
यह अधिक पठनीय है, और यदि प्रदर्शन के लिए जरूरत पड़ती है तो लैम्बडा को कुछ हासिल करने के लिए निकाला जा सकता है।
प्रश्न है: क्या दूसरे तरीके का उपयोग करने में कोई कोताही है? किसी भी प्रदर्शन अंतर? क्या मुझे पाइथोनिक वे ™ पूरी तरह से याद आ रहा है और इसे अभी तक दूसरे तरीके से करना चाहिए (जैसे कि लैम्बडा के बजाय आइटम का उपयोग करना)?
filter
एक फिल्टर जनरेटर ऑब्जेक्ट एक सूची नहीं है।
filter
अधिक पठनीय था। आप एक सरल अभिव्यक्ति एक listcomp में के रूप में है, लेकिन एक लैम्ब्डा में लिपटे हो गया है इस्तेमाल किया जा सकता है कि जब (या इसी के बाहर का निर्माणpartial
याoperator
करने के लिए पारित करने के लिए काम करता है, आदि)filter
, है कि जब listcomps जीतने के लिए।