একটি তালিকা (অ্যারে) থেকে একটি নতুন তালিকা তৈরি করতে যার উপাদানগুলি স্ট্রিং, শুধুমাত্র নির্দিষ্ট শর্ত পূরণ করে এমন স্ট্রিংগুলির উপাদানগুলি বের করে বা প্রতিস্থাপন, রূপান্তর ইত্যাদি সম্পাদন করে, তালিকা বোঝা ব্যবহার করুন৷
তালিকা বোঝার একটি সংক্ষিপ্ত ব্যাখ্যার পরে, নিম্নলিখিত বিষয়বস্তুগুলি নমুনা কোড সহ ব্যাখ্যা করা হয়েছে।
- একটি নির্দিষ্ট স্ট্রিং অন্তর্ভুক্ত কিনা তার উপর ভিত্তি করে নিষ্কাশন (আংশিক মিল)
- নির্দিষ্ট স্ট্রিং প্রতিস্থাপন করুন
- একটি নির্দিষ্ট স্ট্রিং দিয়ে শুরু বা না করে এক্সট্রাক্ট করুন
- একটি নির্দিষ্ট স্ট্রিং দিয়ে শেষ বা শেষ না করে এক্সট্র্যাক্ট করুন
- মামলা দ্বারা বিচার এবং নিষ্কাশন
- বড় হাতের এবং ছোট হাতের অক্ষরে রূপান্তর করুন
- বর্ণানুক্রমিক বা সাংখ্যিক অক্ষর ব্যবহার করা হয়েছে কিনা তা নির্ধারণ করে এবং সেগুলি বের করে
- একাধিক শর্ত
- (কম্পিউটার) রেগুলার এক্সপ্রেশন
নোট করুন যে তালিকাগুলি বিভিন্ন ধরণের ডেটা সঞ্চয় করতে পারে এবং অ্যারে থেকে কঠোরভাবে আলাদা। আপনি যদি মেমরির আকার এবং মেমরির ঠিকানা বা বড় ডেটার সংখ্যাগত প্রক্রিয়াকরণের প্রয়োজন হয় এমন প্রক্রিয়াগুলিতে অ্যারেগুলি পরিচালনা করতে চান তবে অ্যারে (স্ট্যান্ডার্ড লাইব্রেরি) বা NumPy ব্যবহার করুন।
- তালিকা অন্তর্ভুক্তি স্বরলিপি
- একটি নির্দিষ্ট স্ট্রিং রয়েছে (আংশিক মিল) \ ধারণ করে না:in
- নির্দিষ্ট স্ট্রিং প্রতিস্থাপন করুন
- একটি নির্দিষ্ট স্ট্রিং দিয়ে শুরু হয় \ শুরু হয় না:startswith()
- একটি নির্দিষ্ট অক্ষর স্ট্রিং দিয়ে শেষ হয় \ না শেষ:endswith()
- মামলা দ্বারা বিচার এবং নিষ্কাশন
- বড় হাতের এবং ছোট হাতের অক্ষরে রূপান্তর করুন
- বর্ণানুক্রমিক বা সাংখ্যিক অক্ষর ব্যবহার করা হয়েছে কিনা তা নির্ধারণ করে এবং সেগুলি বের করে
- একাধিক শর্ত
- (কম্পিউটার) রেগুলার এক্সপ্রেশন
তালিকা অন্তর্ভুক্তি স্বরলিপি
একটি তালিকা থেকে একটি নতুন তালিকা তৈরি করার সময়, লুপের চেয়ে তালিকা বোঝা সহজ হয়।
[expression for any variable name in iterable object if conditional expression]
যদি উপাদানটি শুধুমাত্র একটি শর্তাধীন অভিব্যক্তি দ্বারা নির্বাচন করা হয় তবে এটি একটি অভিব্যক্তি দ্বারা প্রক্রিয়া করা হয় না, তাই এটি নিম্নলিখিত ফর্মটি গ্রহণ করে
[variable name for variable name in original list if conditional expression]
যদি শর্তসাপেক্ষ অভিব্যক্তিটিকে যদি শর্তাধীন অভিব্যক্তিতে পরিণত করা না হয় তবে এটি একটি অস্বীকৃতিতে পরিণত হয় এবং যে উপাদানগুলি শর্তাধীন অভিব্যক্তিকে সন্তুষ্ট করে না তা বের করা যেতে পারে।
একটি নির্দিষ্ট স্ট্রিং রয়েছে (আংশিক মিল) \ ধারণ করে না:in
“আসল স্ট্রিং-এ নির্দিষ্ট স্ট্রিং”-এ, আসল স্ট্রিংয়ে নির্দিষ্ট স্ট্রিং থাকলে True রিটার্ন করে। এটি একটি শর্তাধীন অভিব্যক্তি।
in-এর বর্জন করা হয় not in দিয়ে।
l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222']
l_in = [s for s in l if 'XXX' in s]
print(l_in)
# ['oneXXXaaa', 'twoXXXbbb']
l_in_not = [s for s in l if 'XXX' not in s]
print(l_in_not)
# ['three999aaa', '000111222']
নির্দিষ্ট স্ট্রিং প্রতিস্থাপন করুন
আপনি যদি তালিকার উপাদানগুলির একটি স্ট্রিং প্রতিস্থাপন করতে চান তবে তালিকা বোঝার স্বরলিপিতে প্রতিটি উপাদানের জন্য স্ট্রিং পদ্ধতি প্রতিস্থাপন() ব্যবহার করুন।
যদি প্রতিস্থাপন করার মতো কোনো স্ট্রিং না থাকে, তাহলে if conditional এক্সপ্রেশনে উপাদান নির্বাচন করার কোনো প্রয়োজন নেই কারণ এটি replace() প্রয়োগ করে পরিবর্তন করা হবে না।
l_replace = [s.replace('XXX', 'ZZZ') for s in l]
print(l_replace)
# ['oneZZZaaa', 'twoZZZbbb', 'three999aaa', '000111222']
আপনি যদি একটি নির্দিষ্ট স্ট্রিং ধারণ করে এমন একটি সম্পূর্ণ উপাদান প্রতিস্থাপন করতে চান, তাহলে এটিকে ইন দিয়ে বের করুন এবং টারনারি অপারেটর দিয়ে প্রক্রিয়া করুন। টারনারি অপারেটর নিম্নলিখিত আকারে লেখা হয়।True Value if Conditional Expression else False Value
এটা ঠিক আছে যদি তালিকা বোঝার স্বরলিপির অভিব্যক্তি অংশটি একটি ত্রিদেশীয় অপারেটর হয়।
l_replace_all = ['ZZZ' if 'XXX' in s else s for s in l]
print(l_replace_all)
# ['ZZZ', 'ZZZ', 'three999aaa', '000111222']
নিম্নলিখিত ফলাফলের সারসংক্ষেপ, বন্ধনীতে আবদ্ধ। আপনি যদি বন্ধনী ব্যবহারে অভ্যস্ত না হন, তাহলে ভুল বোঝা এবং এড়ানো সহজ হতে পারে। ব্যাকরণগতভাবে, বন্ধনী লিখলেও কোনো সমস্যা নেই।
[('ZZZ' if ('XXX' in s) else s) for s in l]
শর্ত হিসাবে in-এর ব্যবহার তালিকা বোঝার স্বরলিপির সাথে বিভ্রান্তিকর, তবে আপনি যদি তালিকা বোঝার স্বরলিপি এবং টারনারি অপারেটরগুলির সিনট্যাকটিক ফর্ম সম্পর্কে সচেতন হন তবে এটি কঠিন নয়।
একটি নির্দিষ্ট স্ট্রিং দিয়ে শুরু হয় \ শুরু হয় না:startswith()
স্ট্রিং মেথড startswith() সত্য রিটার্ন করে যদি স্ট্রিংটি আর্গুমেন্টে নির্দিষ্ট করা স্ট্রিং দিয়ে শুরু হয়।
l_start = [s for s in l if s.startswith('t')]
print(l_start)
# ['twoXXXbbb', 'three999aaa']
l_start_not = [s for s in l if not s.startswith('t')]
print(l_start_not)
# ['oneXXXaaa', '000111222']
একটি নির্দিষ্ট অক্ষর স্ট্রিং দিয়ে শেষ হয় \ না শেষ:endswith()
স্ট্রিং মেথড endswith() সত্য রিটার্ন করে যদি স্ট্রিংটি আর্গুমেন্টে নির্দিষ্ট করা স্ট্রিং দিয়ে শেষ হয়।
l_end = [s for s in l if s.endswith('aaa')]
print(l_end)
# ['oneXXXaaa', 'three999aaa']
l_end_not = [s for s in l if not s.endswith('aaa')]
print(l_end_not)
# ['twoXXXbbb', '000111222']
মামলা দ্বারা বিচার এবং নিষ্কাশন
স্ট্রিং পদ্ধতিগুলি isupper(),islower() ব্যবহার করা যেতে পারে যে একটি স্ট্রিং সমস্ত উপরের বা সমস্ত ছোট হাতের কিনা তা নির্ধারণ করতে।
l_lower = [s for s in l if s.islower()]
print(l_lower)
# ['three999aaa']
বড় হাতের এবং ছোট হাতের অক্ষরে রূপান্তর করুন
আপনি যদি সমস্ত অক্ষরকে বড় বা ছোট হাতের অক্ষরে রূপান্তর করতে চান তবে স্ট্রিং পদ্ধতিগুলি উচ্চ() এবং নিম্ন() ব্যবহার করুন। অন্যান্য পদ্ধতির মধ্যে ক্যাপিটালাইজ(), যা শুধুমাত্র প্রথম অক্ষরকে বড় করে এবং swapcase(), যা বড় এবং ছোট হাতের অক্ষর অদলবদল করে।
উপরের প্রতিস্থাপনের উদাহরণের মতো, যদি আপনি শর্ত পূরণ করে এমন উপাদানগুলিকে প্রক্রিয়া করতে চান তবে টারনারি অপারেটর ব্যবহার করুন।
l_upper_all = [s.upper() for s in l]
print(l_upper_all)
# ['ONEXXXAAA', 'TWOXXXBBB', 'THREE999AAA', '000111222']
l_lower_to_upper = [s.upper() if s.islower() else s for s in l]
print(l_lower_to_upper)
# ['oneXXXaaa', 'twoXXXbbb', 'THREE999AAA', '000111222']
বর্ণানুক্রমিক বা সাংখ্যিক অক্ষর ব্যবহার করা হয়েছে কিনা তা নির্ধারণ করে এবং সেগুলি বের করে
স্ট্রিং পদ্ধতি isalpha() এবং isnumeric() একটি স্ট্রিং সমস্ত বর্ণানুক্রমিক, সংখ্যাসূচক, ইত্যাদি কিনা তা নির্ধারণ করতে ব্যবহার করা যেতে পারে।
l_isalpha = [s for s in l if s.isalpha()]
print(l_isalpha)
# ['oneXXXaaa', 'twoXXXbbb']
l_isnumeric = [s for s in l if s.isnumeric()]
print(l_isnumeric)
# ['000111222']
একাধিক শর্ত
তালিকা বোঝার শর্তাধীন অভিব্যক্তি অংশ একাধিক শর্ত হতে পারে। নেতিবাচক “না” শর্তগুলিও ব্যবহার করা যেতে পারে।
তিন বা ততোধিক শর্তসাপেক্ষ অভিব্যক্তি ব্যবহার করার সময়, প্রতিটি গোষ্ঠীকে বন্ধনী () এ আবদ্ধ করা নিরাপদ কারণ ক্রম অনুসারে ফলাফল পরিবর্তিত হবে।
l_multi = [s for s in l if s.isalpha() and not s.startswith('t')]
print(l_multi)
# ['oneXXXaaa']
l_multi_or = [s for s in l if (s.isalpha() and not s.startswith('t')) or ('bbb' in s)]
print(l_multi_or)
# ['oneXXXaaa', 'twoXXXbbb']
(কম্পিউটার) রেগুলার এক্সপ্রেশন
নিয়মিত অভিব্যক্তি অত্যন্ত নমনীয় প্রক্রিয়াকরণের জন্য অনুমতি দেয়।
ম্যাচ অবজেক্টটি re.match() দ্বারা ফেরত দেওয়া হয় যখন এটি মিলে যায় একটি শর্তসাপেক্ষ অভিব্যক্তির সাথে মূল্যায়ন করার সময় সর্বদা সত্য বলে নির্ধারিত হয়। যদি এটি মেলে না, তবে এটি None প্রদান করে, যা শর্তসাপেক্ষ অভিব্যক্তিতে মিথ্যা। সুতরাং, আপনি যদি শুধুমাত্র রেগুলার এক্সপ্রেশনের সাথে মেলে এমন উপাদানগুলিকে বের করতে চান, তাহলে পূর্বের মতো লিস্ট কম্প্রিহেনশন এক্সপ্রেশনের কন্ডিশনাল এক্সপ্রেশন অংশে re.match() প্রয়োগ করুন।
import re
l = ['oneXXXaaa', 'twoXXXbbb', 'three999aaa', '000111222']
l_re_match = [s for s in l if re.match('.*XXX.*', s)]
print(l_re_match)
# ['oneXXXaaa', 'twoXXXbbb']
re.sub(), যা একটি রেগুলার এক্সপ্রেশনের মিলিত অংশ প্রতিস্থাপন করে, এটিও কার্যকর। শুধুমাত্র মিলে যাওয়া উপাদানগুলি বের করতে এবং প্রতিস্থাপন করতে, শুধু “যদি শর্তসাপেক্ষ অভিব্যক্তি” যোগ করুন।
l_re_sub_all = [re.sub('(.*)XXX(.*)', r'\2---\1', s) for s in l]
print(l_re_sub_all)
# ['aaa---one', 'bbb---two', 'three999aaa', '000111222']
l_re_sub = [re.sub('(.*)XXX(.*)', r'\2---\1', s) for s in l if re.match('.*XXX.*', s)]
print(l_re_sub)
# ['aaa---one', 'bbb---two']