मैं itertools
मॉड्यूल से अधिक परिचित होने की कोशिश कर रहा हूं और ifilter
नामक एक फ़ंक्शन मिला है।itertools.ifilter बनाम। फ़िल्टर बनाम सूची समझ
जो मैं समझता हूं उससे, यह दिए गए फ़ंक्शन के आधार पर फ़िल्टर और पुन: प्रयोज्य होता है और एक पुनरावर्तक के तत्वों को एक पुनरावर्तक देता है जिस पर फ़ंक्शन True
पर मूल्यांकन करता है।
प्रश्न 1: क्या मेरी समझ इस प्रकार सही है?
प्रश्न 2: तथ्य यह है कि यह रिटर्न और इटेटरेटर, अंतर्निहित filter
फ़ंक्शन से अलग कैसे है?
प्रश्न 3 कौन सा तेज़ है?
जो मैं कह सकता हूं, वह नहीं है। क्या मैं कुछ भूल रहा हूँ? (मैं निम्नलिखित परीक्षण भाग गया)
>>> itertools.ifilter(lambda x: x%2, range(5))
<itertools.ifilter object at 0x7fb1a101b210>
>>> for i in itertools.ifilter(lambda x: x%2, range(5)): print i
...
1
3
>>> filter(lambda x: x%2, range(5))
[1, 3]
>>> function = lambda x: x%2
>>> [item for item in range(5) if function(item)]
[1,3]
आप क्या उत्पादन अपेक्षा की थी? 'रेंज (5)' आपको '0,1,2,3,4]' देगी। – istruble
ध्यान दें कि फ़िल्टर के अधिकांश उपयोग जेनरेटर/सूची अभिव्यक्ति पर एक गार्ड द्वारा प्रतिस्थापित किया जा सकता है: 'सूची (x में x के लिए x (x) x x 2) ' –