सूची को देखते हुए ['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)