2010-10-06 15 views
5

क्या पाइथन के निम्नलिखित टुकड़े को लिखने का एक और शानदार तरीका है?सूची समझ में इटेटरेटर को छोड़ दें?

[foo() for i in range(10)] 

मैं किसी सूची में foo() के परिणामों जमा करने के लिए चाहते हैं, लेकिन मैं iterator मैं जरूरत नहीं है।

उत्तर

5

एक तरह से यह करने के लिए _ उपयोग करने के लिए है:

[foo() for _ in range(10)] 

यह बिल्कुल वही बात का मतलब है, लेकिन सम्मेलन द्वारा _ के उपयोग के पाठक है कि सूचकांक वास्तव में कुछ भी करने के लिए नहीं किया जाता है करने के लिए इंगित करता है।

संभावित रूप से foo() हर बार जब आप इसे कॉल करते हैं तो कुछ अलग देता है। यदि ऐसा नहीं होता है, और यह एक ही बात हर बार देता है, तो उसके बाद आप कर सकते हैं:

[foo()] * 10 

एक बार एक सूची में foo() बुला, 10 बार के परिणाम को दोहराने के लिए।

-1

अधिक सुरुचिपूर्ण किसी भी तरह से, लेकिन:

[x() for x in [foo]*10] 

मुझे लगता है कि परे लगता है कि आप रूबी में जाना है;)

-2

map(lambda _ : foo(), range(10))

इस हालांकि एक अर्थहीन इटरेटर के साथ आपकी समस्या को कारोबार मैं लैम्ब्डा अभिव्यक्ति के लिए एक नया अर्थहीन तर्क के साथ।

0

map अच्छा होगा अगर foo() ने तर्क दिया, लेकिन ऐसा नहीं होता है। बजाय, एक डमी लैम्ब्डा कि एक पूर्णांक तर्क लेता बनाने के लिए, लेकिन सिर्फ foo() कहता है:

map(lambda i:foo(), range(10)) 

आप अजगर 3.x पर हैं, तो नक्शा एक सूची के बजाय एक iterator देता है - बस के साथ एक सूची का निर्माण यह:

list(map(lambda i:foo(), range(10))) 
+0

डाउनवोट? कैसे? – PaulMcG

संबंधित मुद्दे