2010-11-23 20 views
467

मैं पाइथन में निम्नलिखित कैसे कर सकता हूं?यदि पाइथन की सूची समझ में/अन्यथा?

row = [unicode(x.strip()) for x in row if x is not None else ''] 
मूलतः

:

  1. रिक्त स्ट्रिंग के साथ सभी Nones की जगह है, और फिर
  2. एक समारोह बाहर ले जाने के।
+3

संभव डुप्लिकेट (http://stackoverflow.com/questions/2951701/is-it- संभव-से-उपयोग-में-एक-अजगर-सूची-समझ) –

उत्तर

734

आप पूरी तरह से है कि, यह सिर्फ एक आदेश मुद्दा है कर सकते हैं:,

[ unicode(x.strip()) if x is not None else '' for x in row ] 

ध्यान दें कि यह वास्तव में एक अलग भाषा संरचना का भी उपयोग, एक conditional expression, जो अपने आप comprehension syntax का हिस्सा नहीं है, जबकि iffor…in के बाद सूची की समझ का हिस्सा है और फ़िल्टर स्रोत स्रोत से तत्वों का उपयोग किया जाता है।

सशर्त अभिव्यक्तियों का उपयोग उन सभी स्थितियों में किया जा सकता है जहां आप कुछ स्थितियों के आधार पर दो अभिव्यक्ति मानों के बीच चयन करना चाहते हैं। यह ternary operator ?: that exists in other languages जैसा ही है।

value = 123 
print(value, 'is', 'even' if value % 2 == 0 else 'odd') 
+86

ध्यान दें कि यदि/else यहां अब "टर्नरी ऑपरेटर" वाक्यविन्यास है और समझदारी सिंटैक्स सूचीबद्ध नहीं है। –

+1

ओपी के पिछले प्रश्न को देखते हुए, @ एडम की टिप्पणी बहुत महत्वपूर्ण है! – delnan

+7

यही कारण है कि मैं टर्नरी ऑपरेटर को ब्रैकेट में रखना पसंद करता हूं, यह स्पष्ट करता है कि यह एक सामान्य अभिव्यक्ति है, समझ नहीं है। –

30

एक ही रास्ता:

def change(f): 
    if f is None: 
     return unicode(f.strip()) 
    else: 
     return '' 

row = [change(x) for x in row] 

तो यद्यपि आप है: उदाहरण के लिए

row = map(change, row) 

या आप एक लैम्ब्डा इनलाइन उपयोग कर सकते हैं।

>>> print(", ".join(["ha" if i else "Ha" for i in range(3)]) + "!") 
Ha, ha, ha! 

यह तथ्य यह है कि if i0 के लिए और समारोह range() द्वारा उत्पन्न अन्य सभी मूल्यों के लिए True को False का मूल्यांकन कारनामे:

+8

यह भी एक अच्छा (शायद केवल) तकनीक का उपयोग करने के लिए उपयोग किया जाता है जब आपको 'if' अभिव्यक्ति या कोड या उसके अन्य कथन ब्लॉक से संभावित अपवादों को संभालना होता है। स्वीकृत उत्तर सरल मामलों के लिए बेहतर है। – martineau

+1

सूची समझ में इसका उपयोग करने से पढ़ने के लिए यह बहुत आसान है। –

25

यहाँ एक और उदाहरण उदाहरण है। इसलिए सूची समझ इस प्रकार का मूल्यांकन करता है:

>>> ["ha" if i else "Ha" for i in range(3)] 
['Ha', 'ha', 'ha'] 
की [? यह संभव एक अजगर सूची समझ में 'शेष' का उपयोग करने है]
संबंधित मुद्दे