सामग्री के आधार पर तार की एक सूची को छानना


101

सूची को देखते हुए ['a','ab','abc','bac'], मैं 'ab'उन तारों के साथ एक सूची की गणना करना चाहता हूं जो उनमें हैं। यानी परिणाम है ['ab','abc']। यह पायथन में कैसे किया जा सकता है?

जवाबों:


170

इस साधारण फ़िल्टरिंग को पायथन के साथ कई तरीकों से हासिल किया जा सकता है। सबसे अच्छा तरीका "सूची समझ" का उपयोग करना है:

>>> lst = ['a', 'ab', 'abc', 'bac']
>>> [k for k in lst if 'ab' in k]
['ab', 'abc']

एक अन्य तरीका filterफ़ंक्शन का उपयोग करना है। पायथन 2 में:

>>> filter(lambda k: 'ab' in k, lst)
['ab', 'abc']

पायथन 3 में, यह एक सूची के बजाय एक पुनरावृत्त लौटाता है , लेकिन आप इसे डाल सकते हैं:

>>> list(filter(lambda k: 'ab' in k, lst))
['ab', 'abc']

हालांकि यह एक समझ का उपयोग करने के लिए बेहतर अभ्यास है।


30
@ एस.लॉट: क्यों? उपयुक्त संदर्भ में उपयोगी उन्नत प्रोग्रामिंग विषयों को सीखने में क्या गलत है?
एली बेंडरस्की

12
@ S.Lott: मुझे लगता है कि लंबदा फ़र्स्ट-क्लास ऑब्जेक्ट के रूप में फ़ंक्शंस पर विचार करने की सुविधा प्रदान कर रहे हैं, जो कुछ प्रोग्रामिंग प्रतिमानों के लिए महत्वपूर्ण है। मैं यह नहीं कहूंगा कि वे मेरे लिए बहुत महत्वपूर्ण हैं , लेकिन मेरा मानना ​​है कि इस तरह के प्रोग्रामिंग के बारे में सोचने से भी newbies लाभान्वित हो सकते हैं, और निश्चित रूप से इसे भड़काऊ नहीं कहेंगे ।
एली बेन्डस्की

6
@ S.Lott: लेकिन इस मामले में lambdaसही साथी नहीं है filter? मुझे लगता है कि abदिए गए सूची में है या नहीं, यह जाँचने के लिए एक अलग कार्य लिखना । इसलिए एक अधिक सामान्य फ़ंक्शन लिख रहा है जो मूल रूप से inऑपरेटर को लपेटता है । आप यहां filterबिना किसी स्पष्ट तरीके से कैसे उपयोग करेंगे lambda?
एली बेंडरस्की

5
यह न केवल n00bs है, जो इस उत्तर को खोजते हैं
ब्रायन

9
मैं एक n00b हूं और अब मुझे लैम्बडा से मिलवाया गया है। यह जानकर बहुत अच्छा लगा। अब मैं इसके बारे में और जानूंगा।
a_secentharies



6

इंटरैक्टिव शेल में इसे जल्दी से आज़माया:

>>> l = ['a', 'ab', 'abc', 'bac']
>>> [x for x in l if 'ab' in x]
['ab', 'abc']
>>>

यह काम क्यों करता है? क्योंकि inऑपरेटर का अर्थ स्ट्रिंग्स के लिए परिभाषित किया गया है: "का विकल्प है"।

इसके अलावा, आप ऊपर दिए गए सूची समझ सिंटैक्स का उपयोग करने के विपरीत लूप को लिखने पर विचार करना चाह सकते हैं :

l = ['a', 'ab', 'abc', 'bac']
result = []
for s in l:
   if 'ab' in s:
       result.append(s)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.