व्यक्तिगत रूप से, मुझे यह एक अधिक सुरुचिपूर्ण समाधान मिल गया है। लैम्ब्डा एक समारोह देता है, इसलिए यदि हम फ़ंक्शन का उपयोग करना चाहते हैं, तो हमें इसका उपयोग करना चाहिए। यह लैम्ब्डा में और जनरेटर के लिए 'अज्ञात' चर के लिए एक ही प्रतीक का उपयोग करने में भ्रमित है, इसलिए मेरे उदाहरण में मैं आशा करता हूं कि यह एक और प्रतीक का उपयोग करें ताकि इसे उम्मीद से अधिक स्पष्ट किया जा सके।
>>> [ (lambda a:a)(i) for i in range(3)]
[0, 1, 2]
>>>
यह भी तेज़ है।
>>> timeit.timeit('[(lambda a:a)(i) for i in range(10000)]',number=10000)
9.231263160705566
>>> timeit.timeit('[lambda a=i:a for i in range(10000)]',number=10000)
11.117988109588623
>>>
लेकिन नहीं के रूप में तेजी से नक्शे के रूप में:
>>> timeit.timeit('map(lambda a:a, range(10000))',number=10000)
5.746963977813721
(मैं, इन परीक्षणों एक बार से अधिक भाग गया परिणाम एक ही था, इस अजगर 2.7 में किया गया था, परिणाम अजगर 3 में अलग हैं: दो सूची की समझ प्रदर्शन में बहुत करीब है और बहुत धीमी है, नक्शा बहुत तेज़ रहता है।)
स्रोत
2017-11-12 12:33:59
... लेकिन यह इटरेटर के साथ काम करता है। >>> l = (lambda: m के लिए m [1,2,3 ]) >>> [x() x में x के लिए] – GeneralBecos
ऐसा इसलिए है क्योंकि जेनरेटर एक बार में अपने मूल्यों को नहीं बनाता है, जब अनुरोध किया जाता है तो यह उन्हें बनाता है। एक सूची समझ और जनरेटर अभिव्यक्ति समान नहीं है, हालांकि उन्हें अक्सर एक दूसरे के लिए उपयोग किया जा सकता है। ऐसी स्थितियां हैं (इस तरह की) जहां व्यवहार _ignignantly_ अलग है। –
क्यों 'x()' सिर्फ 'x' नहीं ?? यह अलग कैसे है ?? – amyassin