मैं एक विधि है कि एक सूची लेने के लिए और एक वस्तुपायथन: स्थानीय समझ को सूची समझ में कैसे सेट करें?
# input a list, returns an object
def map_to_obj(lst):
a_list = f(lst)
return a_list[0] if a_list else None
मैं एक सूची है कि सभी मैप किया तत्वों कि None
नहीं करतीं प्राप्त करना चाहते वापसी की है।
:
v_list = [v1, v2, v3, v4]
[map_to_obj(v) for v in v_list if map_to_obj(v)]
लेकिन यह सूची समझ में दो बार map_to_obj
विधि कॉल करने के अच्छा नहीं लगता है।
क्या सूची समझ में स्थानीय चर रखने का कोई तरीका है ताकि बेहतर प्रदर्शन हो सके?
या क्या संकलक स्वचालित रूप से इसे अनुकूलित करता है?
यहाँ मैं क्या चाहते है:
(sml like)
[let mapped = map_to_obj(v) in for v in v_list if mapped end]
यह एक अच्छा जवाब है। उत्तर में प्रश्न चिह्न नहीं होना चाहिए। – Paul
यह एक अच्छा जवाब है, और निश्चित रूप से यह [behzad] (http://stackoverflow.com/users/625914/behzad-nouri) जैसा है, 'मानचित्र' और '' के स्थान पर सूची समझ के साथ फिल्टर' ... मैं ऊपर उठने जा रहा हूं क्योंकि मुझे पसंद आया [झूठ बोलना कुत्ता] (http: // stackoverflow।कॉम/उपयोगकर्ता/4134826/झूठ बोलने वाले) एल-सी के संदर्भ में 'फ़िल्टर' का अनुवाद किया गया है, लेकिन ओपी उन उत्तरों में से एक को स्वीकृति दे सकता है क्योंकि दोनों ठीक, उपयोगी उत्तर हैं। – gboffi
आंतरिक समझ एक जनरेटर अभिव्यक्ति होना चाहिए। पूरी सूची बनाने की आवश्यकता नहीं है और केवल तभी खाली वस्तुओं को एक और सूची बनाने के लिए फेंक दें। –