2012-01-01 15 views
10

आम तौर पर, मौजूदा सूची से नई सूची प्राप्त करने के लिए सूची की समझ का उपयोग किया जाता है। उदाहरण:सूची समझों का उचित उपयोग - पायथन

>>> a = [1, 2, 3, 4, 5] 
>>> [i for i in a if i > 2] 
[3, 4, 5] 

क्या हमें अन्य प्रक्रियाओं को करने के लिए उनका उपयोग करना चाहिए? उदाहरण के लिए:

>>> a = [1, 2, 3, 4, 5] 
>>> b = [] 
>>> [b.append(i) for i in a] 
[None, None, None, None, None] 
>>> print b 
[1, 2, 3, 4, 5] 

या मैं ऊपर से बचने और बजाय निम्नलिखित ?:

for i in a: 
    b.append(i) 

उत्तर

10

आप वास्तव में सूची comprehensions (का उपयोग कर शब्दकोश comprehensions के साथ बचना चाहिए, comprehensions सेट और जनरेटर अभिव्यक्ति) दुष्प्रभावों के लिए। इस तथ्य के अलावा कि वे एक फर्जी सूची जमा करेंगे और इस तरह स्मृति को बर्बाद कर देंगे, यह भी भ्रमित है। मैं एक (सार्थक) मूल्य उत्पन्न करने के लिए एक सूची समझ की उम्मीद करता हूं, और कई सहमत होंगे। दूसरी ओर, लूप्स स्पष्ट रूप से बयानों का एक अनुक्रम हैं। उनसे दुष्प्रभावों को दूर करने और कोई परिणाम मूल्य उत्पन्न करने की उम्मीद नहीं है - कोई आश्चर्य नहीं।

2

का उपयोग उदाहरण आप इसे सबसे अधिक उपयुक्त होगा करने के लिए देते हैं चाहिए:

b = [i for i in a] 

अगर किसी कारण से आप बी बनाना चाहते थे। आम तौर पर, कुछ सामान्य ज्ञान है जो नियोजित किया जाना चाहिए। यदि समझ का उपयोग करने से आपका कोड अपठनीय हो जाता है, तो इसका उपयोग न करें। अन्यथा इसके लिए जाओ।

+1

'बी = ए [:] 'भी काम करेगा ... –

2

यदि आप बनाई गई सूची का उपयोग करने की योजना बनाते हैं तो केवल सूची समझ का उपयोग करें। अन्यथा आप इसे जीसी के लिए कभी भी इस्तेमाल किए बिना इसे फेंकने के लिए बनाते हैं।

तो [b.append(i) for i in a] के बजाय आप पाश के लिए एक उचित उपयोग करना चाहिए:

for i in a: 
    b.append(i) 

एक अन्य समाधान एक जनरेटर अभिव्यक्ति के माध्यम से होगा:

b += (i for i in a) 

हालांकि, अगर आप संलग्न करना चाहते हैं पूरी सूची, आप बस

b += a 
कर सकते हैं 0

और अगर आप सिर्फ उन्हें सूची में जोड़ने से पहले तत्वों के लिए एक समारोह लागू करने की आवश्यकता है, आप हमेशा map उपयोग कर सकते हैं:

b += map(somefunc, a) 
+0

मुझे विश्वास है कि आप (वास्तव में बल्कि खराब) उदाहरण पर बहुत अधिक ध्यान केंद्रित कर रहे हैं। – delnan

+0

खैर मुख्य प्रश्न बहुत शुरुआत में उत्तर दिया है - उदाहरण के बारे में सामान बस उपयोगकर्ता विकल्प के बारे में कुछ विचार दे रहा है। – ThiefMaster

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