তালিকাটি দেওয়া হয়েছে ['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)
mylist = ['a', 'ab', 'abc']
assert 'ab' in mylist