2016-01-30 3 views
10

मान लीजिए कि मैं int रों की एक सूची है दो:वापसी सबसेट से मेल खाती है कि स्थिति

listOfNumbers = range(100) 

और मैं तत्वों है कि एक निश्चित शर्त को पूरा की एक सूची प्रदान करना चाहते हैं, कहते हैं:

def meetsCondition(element): 
    return bool(element != 0 and element % 7 == 0) 

list में तत्व के उप-list को वापस करने के लिए एक पाइथोनिक तरीका क्या है जिसके लिए meetsCondition(element)True है?

एक अनुभवहीन दृष्टिकोण:

def subList(inputList): 
    outputList = [] 

    for element in inputList: 
     if meetsCondition(element): 
      outputList.append(element) 

    return outputList 

divisibleBySeven = subList(listOfNumbers) 

वहाँ यह करने के लिए एक आसान तरीका है, शायद एक सूची समझ या set() कार्यों के साथ साथ, और अस्थायी outputList बिना?

+0

ध्यान दें कि 'divisibleBySeven' वास्तव में के रूप में ही' list' वस्तु है अपने meetsCondition साथ filter फ़ंक्शन का उपयोग कर सकते हैं, 'outputList', है ना इसकी एक प्रति है। –

उत्तर

17

उपयोग सूची समझ,

divisibleBySeven = [num for num in inputList if num != 0 and num % 7 == 0] 

या आप meetsCondition भी उपयोग कर सकते हैं,

divisibleBySeven = [num for num in inputList if meetsCondition(num)] 

आप वास्तव में, पायथन के truthy अर्थ विज्ञान के साथ एक ही हालत में लिख सकते हैं इस

divisibleBySeven = [num for num in inputList if num and num % 7] 
की तरह

वैकल्पिक रूप से, आप की तरह इस

divisibleBySeven = filter(meetsCondition, inputList) 
+4

पायथन 3 में, ['फ़िल्टर'] (https://docs.python.org/3.3/library/functions.html#filter) एक इटरेटर (आईओओ जनरेटर) देता है, इसलिए यदि आपको वास्तव में एक सूची की आवश्यकता है तो आपको चाहिए कुछ सूची करने के लिए (फ़िल्टर (MeetCondition, इनपुटलिस्ट)) '। –

+2

@ पीएम 2Ring सच है कि। मैंने इसमें शामिल नहीं किया क्योंकि ओपी टैग 2.7: डी – thefourtheye

+0

पर्याप्त मेला। मुझे लगा कि भविष्य के पाठकों के लिए यह उपयोगी जानकारी हो सकती है। –

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

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