मैं जानना चाहता हूं कि जेनरेट किए गए अनुक्रम में 2 से कम प्रविष्टियां हैं या नहीं।जेनरेट किए गए अनुक्रम को कैसे पता चलेगा एक निश्चित लंबाई
>>> secret = 5
>>> len(list(sequence())) < 2
True
जाहिर है, इस पूरे जनरेटर की खपत:
>>> def sequence():
... for i in xrange(secret):
... yield i
मेरे अक्षम विधि सूची बनाते हैं, और इसकी लंबाई को मापने के लिए है।
मेरे असली मामले में जनरेटर एक बड़े नेटवर्क को पार कर सकता है। मैं पूरे जेनरेटर का उपभोग किए बिना चेक करना चाहता हूं, या बड़ी सूची बनाना चाहता हूं।
एक recipe in the itertools documentation नहीं है:
def take(n, iterable):
"Return first n items of the iterable as a list"
return list(islice(iterable, n))
यह केवल अधिकतम लंबाई n
है, जो बेहतर है की एक सूची बनाता है।
तो मैं कह सकते हैं:
>>> len(take(2, sequence()) < 2
वहाँ एक और भी अधिक pythonic, कुशल यह करने के लिए रास्ता नहीं है?
यह एक बड़ा सवाल पीटर लकड़ी है - मेरी भोली दृष्टिकोण एक अस्थायी दो उपज के लिए होगा तत्वों और उन्हें स्टोर, लेकिन एक बेहतर तरीका होना चाहिए। मैं इसके बारे में उत्सुक हूँ। मुझे संदेह है कि एक जनरेटर खपत से पहले अपने आकार को जान सकता है। –
चुपचाप असंबंधित लेकिन सामान्य नियम 'सूची (पुनरावर्तक)' से सावधान रहें, इटरेटर अनंत हो सकते हैं ... –
निश्चित रूप से मुख्य प्रश्न यह है कि - यदि आप लंबे समय तक लंबे समय तक जा रहे हैं, तो यह * आप * बिना * उपभोग करने वाले को कैसे जानते होंगे, या पर्याप्त छोटा? आपका शीर्षक प्रश्न के साथ संघर्ष करने लगता है)? क्या आपके पास कोई अन्य जानकारी है जो आपको यह निर्धारित करने की अनुमति दे सकती है? – jonrsharpe