मैं एक विशिष्ट फ़िल्टर से मेल खाने वाली सूची में आइटमों की संख्या को गिनने का सबसे तेज़ तरीका ढूंढने का प्रयास कर रहा था। इस मामले में, एक सूची में कितनी विषम संख्याएं हैं, यह पता लगाना।यह जीनएक्सपी एक सूची समझ से भी बदतर क्यों है?
जबकि यह कर रहा है, मैं बनाम बराबर जनरेटर अभिव्यक्ति एक सूची समझ की तुलना के परिणाम से आश्चर्यचकित था:
python -m timeit -s "L = xrange(1000000)" "sum([1 for i in L if i & 1])"
10 loops, best of 3: 109 msec per loop
python -m timeit -s "L = xrange(1000000)" "sum(1 for i in L if i & 1)"
10 loops, best of 3: 125 msec per loop
मैं भी एल एक नियमित रूप से सूची होने के साथ की कोशिश की है, और विभिन्न आकारों, लेकिन सभी में मामलों की समझ जीतने के मामले।
जीनएक्सपी क्या कर रहा है जो सूची सूची की तुलना में धीमी हो जाती है जो 1 मिलियन वस्तुओं के साथ एक नई सूची बनाता है ...?
(Btw, सबसे तेज़ तरीका मैंने पाया था: x = 1; len(filter(x.__and__, L))
और उस तरह कोड हाँ, मैं लिख पता बिल्ली के बच्चे को मारता है, मैं इसके बारे में मनोरंजन के लिए यह कर रहा हूँ।) जब अनिवार्य रूप से असीमित स्मृति उपलब्ध है
1+ किया था। यह भी ध्यान दिया जा सकता है कि कई मामलों में जनरेटर प्रकृति की तरह अपनी धारा के कारण कम स्मृति का उपयोग कर सकते हैं। किसी फ़ाइल में प्रत्येक पंक्ति को एक सूची में पढ़ने पर विचार करें और इसकी तुलना करें कि प्रत्येक पंक्ति को पढ़ने के साथ, इसके साथ काम करना और इसे छोड़ना। – Skurmedel