पायथन 2.6 या नए में:
यदि आप चाहते हैं कि StopIteration
अगर कोई मेल खाने वाला तत्व न मिले तो:
next(x for x in the_iterable if x > 3)
यदि आप चाहते हैं default_value
(उदाहरण के लिए None
) इसके बजाय लौटाया जाना चाहिए:
next((x for x in the_iterable if x > 3), default_value)
ध्यान दें कि आपको इस मामले में जनरेटर अभिव्यक्ति के चारों ओर कोष्ठक की एक अतिरिक्त जोड़ी की आवश्यकता है - जब भी जनरेटर अभिव्यक्ति एकमात्र तर्क नहीं हो, तो उनकी आवश्यकता होती है।
मुझे अधिकांश उत्तर next
बिल्ट-इन को अनदेखा करते हुए दिखाई देते हैं और इसलिए मुझे लगता है कि किसी रहस्यमय कारण से वे 100% 2.5 और पुराने संस्करणों पर ध्यान केंद्रित कर रहे हैं - पायथन-संस्करण के मुद्दे का उल्लेख किए बिना (लेकिन तब मैं उस उल्लेख का उल्लेख नहीं करता हूं जवाब है कि ऐसा उल्लेख next
में निर्मित है, जिसके कारण मैंने सोचा कि यह आवश्यक एक जवाब अपने आप को प्रदान करने के लिए - कम से कम "सही संस्करण" मुद्दा रिकॉर्ड पर इस तरह से ;-) हो जाता है।
2.5 में, पुनरावृत्तियों की .next()
विधि तुरंत उठती है StopIteration
यदि पुनरावृत्ति तुरंत समाप्त हो जाती है - यानी, आपके उपयोग के मामले के लिए, यदि पुनरावृत्तियों में कोई भी वस्तु स्थिति को संतुष्ट नहीं करती है। यदि आप परवाह नहीं करते हैं (यानी, आप जानते हैं कि कम से कम एक संतोषजनक आइटम होना चाहिए) तो बस उपयोग करें .next()
(एक जीनएक्सपी पर सबसे अच्छा, next
अंतर्निहित पायथन 2.6 और बेहतर के लिए लाइन )।
यदि आप देखभाल करते हैं, तो एक फ़ंक्शन में चीजों को लपेटना जैसा कि आपने पहली बार अपने क्यू में संकेत दिया था, सबसे अच्छा लगता है, और जबकि आपके द्वारा प्रस्तावित फ़ंक्शन कार्यान्वयन ठीक है, आप वैकल्पिक रूप से itertools
, एक for...: break
लूप, या एक जीनएक्सपी, या try/except StopIteration
फ़ंक्शन के शरीर के रूप में उपयोग कर सकते हैं। , जैसा कि विभिन्न उत्तर सुझाए गए हैं। इन विकल्पों में से किसी में भी बहुत अधिक मूल्य नहीं है, इसलिए मैं आपके द्वारा पहले प्रस्तावित स्टार्कली-सरल संस्करण के लिए जाऊंगा।