2012-04-22 8 views
14

मैं सोच रहा था, क्या सूची समझ में एकाधिक if स्थितियां रखना संभव है? मुझे दस्तावेज़ों में ऐसा कुछ नहीं मिला।एक पायथन सूची समझ में एकाधिक IF स्थितियां

मैं इस

ar=[] 
for i in range(1,n): 
    if i%4 == 0: ar.append('four') 
    elif i%6 == 0: ar.append('six') 
    else: ar.append(i) 

एक सूची समझ का उपयोग कर की तरह कुछ करने के लिए सक्षम होना चाहता हूँ। मैं यह कैसे कर सकता हूं?

क्या यह भी संभव है? यदि ऐसा नहीं है, तो इसे पूरा करने के लिए सबसे सुरुचिपूर्ण (पायथनिक) तरीका क्या होगा?

+1

सिर्फ इसलिए कि आप ... – dkamins

उत्तर

16

कैसे के बारे में

ar = [('four' if i % 4 == 0 else ('six' if i % 6 == 0 else i)) for i in range(1, n)] 

उदाहरण के लिए, यदि n = 30 इस

[1, 2, 3, 'four', 5, 'six', 7, 'four', 9, 10, 11, 'four', 13, 14, 15, 'four', 17, 'six', 19, 'four', 21, 22, 23, 'four', 25, 26, 27, 'four', 29] 

ईटीए है:

CONDITIONS = [(lambda i: i % 4 == 0, "four"), (lambda i: i % 6 == 0, "six"), 
       (lambda i: i % 7 == 0, "seven")] 

def apply_conditions(i): 
    for condition, replacement in CONDITIONS: 
     if condition(i): 
      return replacement 
    return i 

ar = map(apply_conditions, range(0, n)) 
+2

धन्यवाद! मुझे विश्वास है कि इस तरह से मैं इसमें कई स्थितियों को जोड़ सकता हूं। हालांकि कोड समझ में नहीं आता है! – Rushil

+0

मेरा संपादन देखें। मुझे यकीन है कि आप शेष को समझ सकते हैं (लेकिन अगर मैं मदद नहीं कर सकता) –

+0

(मेरा मूल उन्हें लैम्ब्डा स्टेटमेंट बनाने के लिए उपेक्षित है, वर्तमान संस्करण हालांकि काम करेगा) –

5

आप रख सकते हैं: यहाँ आप कैसे शर्तों की सूची लागू हो सकते हैं है एक अलग समारोह में तर्क, और फिर बुद्धि के साथ सूची समझ का लालित्य है एच समारोह की पठनीयता:

def cond(i): 
    if i % 4 == 0: return 'four' 
    elif i % 6 == 0: return 'six' 

    return i 

l=[cond(i) for i in range(1,n)]