सूची को देखते हुए ['a','ab','abc','bac'], मैं 'ab'उन तारों के साथ एक सूची की गणना करना चाहता हूं जो उनमें हैं। यानी परिणाम है ['ab','abc']। यह पायथन में कैसे किया जा सकता है?
जवाबों:
इस साधारण फ़िल्टरिंग को पायथन के साथ कई तरीकों से हासिल किया जा सकता है। सबसे अच्छा तरीका "सूची समझ" का उपयोग करना है:
>>> 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']
हालांकि यह एक समझ का उपयोग करने के लिए बेहतर अभ्यास है।
lambdaसही साथी नहीं है filter? मुझे लगता है कि abदिए गए सूची में है या नहीं, यह जाँचने के लिए एक अलग कार्य लिखना । इसलिए एक अधिक सामान्य फ़ंक्शन लिख रहा है जो मूल रूप से inऑपरेटर को लपेटता है । आप यहां filterबिना किसी स्पष्ट तरीके से कैसे उपयोग करेंगे lambda?
[x for x in L if 'ab' in x]
# To support matches from the beginning, not any matches:
items = ['a', 'ab', 'abc', 'bac']
prefix = 'ab'
filter(lambda x: x.startswith(prefix), items)
इंटरैक्टिव शेल में इसे जल्दी से आज़माया:
>>> 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)