පයිතන් හි නූල් ලැයිස්තුවක (අරාවක) කොන්දේසි සපුරාලන මූලද්‍රව්‍ය උපුටා ගැනීම සහ ප්‍රතිස්ථාපනය කිරීම

ව්යාපාරික

යම් යම් කොන්දේසි තෘප්තිමත් කරන තන්තු වල මූලද්‍රව්‍ය පමණක් උකහා ගැනීමෙන් හෝ ආදේශන, පරිවර්තන යනාදිය සිදු කිරීමෙන් මූලද්‍රව්‍ය තන්තු සහිත ලැයිස්තුවකින් (අරාවකින්) නව ලැයිස්තුවක් උත්පාදනය කිරීමට, ලැයිස්තු අවබෝධතා භාවිතා කරන්න.

ලැයිස්තු අවබෝධය පිළිබඳ කෙටි පැහැදිලි කිරීමකින් පසුව, පහත අන්තර්ගතය නියැදි කේතය සමඟ පැහැදිලි කෙරේ.

  • නිශ්චිත තන්තුවක් ඇතුළත් කර තිබේද නැද්ද යන්න මත පදනම්ව උපුටා ගැනීම (අර්ධ ගැලපීම)
  • නිශ්චිත තන්තුව ප්‍රතිස්ථාපනය කරන්න
  • නිශ්චිත තන්තුවකින් ආරම්භ කිරීමෙන් හෝ ආරම්භ නොකිරීමෙන් උපුටා ගන්න
  • නිශ්චිත තන්තුවකින් අවසන් කිරීමෙන් හෝ අවසන් නොකිරීමෙන් උපුටා ගන්න
  • නඩුවෙන් විනිශ්චය කර උපුටා ගන්නා ලදී
  • ලොකු අකුරු සහ කුඩා අකුරු පරිවර්තනය කරන්න
  • අකාරාදී හෝ සංඛ්‍යාත්මක අක්ෂර භාවිතා කරන්නේද යන්න තීරණය කර ඒවා උපුටා ගනී
  • බහු කොන්දේසි
  • (පරිගණක) නිත්‍ය ප්‍රකාශනය

ලැයිස්තුවලට විවිධ වර්ගයේ දත්ත ගබඩා කළ හැකි අතර ඒවා අරාවලින් දැඩි ලෙස වෙනස් වන බව සලකන්න. ඔබට මතක ප්‍රමාණය සහ මතක ලිපින හෝ විශාල දත්ත සංඛ්‍යාත්මක සැකසුම් අවශ්‍ය වන ක්‍රියාවලි වල අරා හැසිරවීමට අවශ්‍ය නම්, array (සම්මත පුස්තකාලය) හෝ NumPy භාවිතා කරන්න.

ලැයිස්තු ඇතුළත් කිරීමේ අංකනය

ලැයිස්තුවකින් නව ලැයිස්තුවක් උත්පාදනය කරන විට, ලූප සඳහා වඩා ලිස්ට් අවෙබෝධයන් ලිවීමට සරල ය.

[expression for any variable name in iterable object if conditional expression]

මූලද්‍රව්‍යය තෝරාගත යුත්තේ කොන්දේසි සහිත ප්‍රකාශනයකින් නම්, එය ප්‍රකාශනයකින් සකසන්නේ නැත, එබැවින් එය පහත ආකාරය ගනී

[variable name for variable name in original list if conditional expression]

if කොන්දේසි සහිත ප්‍රකාශනය කොන්දේසි සහිත ප්‍රකාශනයක් බවට පත් කළහොත්, එය නිෂේධනයක් බවට පත් වන අතර, කොන්දේසි සහිත ප්‍රකාශනය තෘප්තිමත් නොවන මූලද්‍රව්‍ය උපුටා ගත හැක.

නිශ්චිත තන්තුවක් (අර්ධ ගැලපීම) අඩංගු වේ \ අඩංගු නොවේ:in

“මුල් තන්තුවෙහි විශේෂිත තන්තුව” තුළ, මුල් තන්තුවෙහි නිශ්චිත තන්තුව තිබේ නම් True ලෙස ලබා දෙයි. මෙය කොන්දේසි සහිත ප්රකාශනයකි.

in හි නිෂේධනය සිදු වන්නේ 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 කොන්දේසි ප්‍රකාශනයේ ඇති මූලද්‍රව්‍යය තේරීමට අවශ්‍ය නොවේ මන්ද එය replace() යෙදීමෙන් වෙනස් නොවනු ඇත.

l_replace = [s.replace('XXX', 'ZZZ') for s in l]
print(l_replace)
# ['oneZZZaaa', 'twoZZZbbb', 'three999aaa', '000111222']

ඔබට නිශ්චිත තන්තුවක් අඩංගු සම්පූර්ණ මූලද්‍රව්‍යයක් ප්‍රතිස්ථාපනය කිරීමට අවශ්‍ය නම්, එය in සමඟ උපුටා ගෙන එය ත්‍රිත්ව ක්‍රියාකරු සමඟ සකසන්න. ත්‍රිත්ව ක්‍රියාකරු පහත දැක්වෙන ආකාරයෙන් ලියා ඇත.
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()

string method startswith() returns true ලෙස තන්තුව ආරම්භ වන්නේ තර්කයේ දක්වා ඇති තන්තුවෙන් නම්.

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()

තන්තු ක්‍රමය අවසන් වන්නේ () තර්කයේ දක්වා ඇති තන්තුවෙන් තන්තුව අවසන් වන්නේ නම් සත්‍ය ලෙස ලබා දෙයි.

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']
Copied title and URL