সামগ্রীর উপর ভিত্তি করে স্ট্রিংগুলির একটি তালিকা ফিল্টার করা


102

তালিকাটি দেওয়া হয়েছে ['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
@ এস.লোট: আমি মনে করি ল্যাম্বডাস প্রথম শ্রেণীর বস্তু হিসাবে ফাংশনগুলির বিবেচনার সুবিধার্থে যা কিছু প্রোগ্রামিং দৃষ্টান্তের জন্য গুরুত্বপূর্ণ। আমি বলব না যে এগুলি আমার কাছে অত্যন্ত গুরুত্বপূর্ণ , তবে আমি বিশ্বাস করি যে এমনকি নবজাতকরাও এইভাবে প্রোগ্রামিংয়ের বিষয়ে চিন্তাভাবনা থেকে উপকৃত হতে পারেন এবং অবশ্যই এটিকে ক্ষতিগ্রস্থ বলবেন না ।
এলি বেন্ডারস্কি

6
@ এস.লোট: তবে lambdaএক্ষেত্রে নিখুঁত সঙ্গী নন filter? আমি মনে করি যে abপ্রদত্ত তালিকায় রয়েছে কিনা তা যাচাই করার জন্য একটি পৃথক ফাংশন লেখা একটি ওভারকিল। সুতরাং আরও একটি সাধারণ ফাংশন লিখছি যা মূলত inঅপারেটরটিকে আবৃত করে । আপনি এখানে filterছাড়া কীভাবে আরও পরিষ্কার উপায়ে ব্যবহার করবেন lambda?
এলি বেন্ডারস্কি

4
এটি কেবল n00b নয় যারা এই উত্তরটি খুঁজে পান
ব্রায়ান

9
আমি একটি এন 100 বি এবং এখন ল্যাম্বডায় আমার পরিচয় হয়। এটি জানতে পেরে দুর্দান্ত লাগছে। এখন আমি এটি সম্পর্কে আরও শিখতে হবে।
এ_সেন্টুসিস্ট



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)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.