ایسے عناصر کو نکالنا اور تبدیل کرنا جو ازگر میں تاروں کی فہرست (سرنی) کی شرائط کو پورا کرتے ہیں۔

کاروبار

کسی فہرست (صفی) سے ایک نئی فہرست بنانے کے لیے جس کے عناصر سٹرنگز ہیں، صرف سٹرنگز کے عناصر کو نکال کر جو کچھ شرائط کو پورا کرتے ہیں، یا متبادلات، تبادلوں وغیرہ کو انجام دے کر، فہرست کی تفہیم کا استعمال کریں۔

فہرست کی تفہیم کی مختصر وضاحت کے بعد، نمونہ کوڈ کے ساتھ مندرجہ ذیل مواد کی وضاحت کی گئی ہے۔

  • ایک مخصوص سٹرنگ شامل ہے یا نہیں اس کی بنیاد پر نکالنا (جزوی میچ)
  • مخصوص سٹرنگ کو تبدیل کریں۔
  • ایک مخصوص سٹرنگ کے ساتھ شروع یا نہ شروع کرکے نکالیں۔
  • کسی مخصوص سٹرنگ کے ساتھ ختم ہونے یا نہ ختم ہونے کے ذریعے نکالیں۔
  • کیس کی طرف سے فیصلہ کیا اور نکالا
  • بڑے اور چھوٹے میں تبدیل کریں۔
  • اس بات کا تعین کرتا ہے کہ آیا حروف تہجی یا عددی حروف استعمال کیے گئے ہیں اور انہیں نکالتا ہے۔
  • متعدد شرائط
  • (کمپیوٹر) باقاعدہ اظہار

نوٹ کریں کہ فہرستیں مختلف قسم کے ڈیٹا کو محفوظ کر سکتی ہیں اور صفوں سے بالکل مختلف ہیں۔ اگر آپ ایسے پراسیس میں صفوں کو ہینڈل کرنا چاہتے ہیں جن کے لیے میموری کا سائز اور میموری ایڈریسز یا بڑے ڈیٹا کی عددی پروسیسنگ کی ضرورت ہوتی ہے، تو array (معیاری لائبریری) یا NumPy استعمال کریں۔

فہرست میں شمولیت کا اشارہ

فہرست سے ایک نئی فہرست تیار کرتے وقت، فہرست کی تفہیم لوپس کے مقابلے میں لکھنا آسان ہے۔

[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 کی نفی 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']

مخصوص سٹرنگ کو تبدیل کریں۔

اگر آپ فہرست عناصر کی سٹرنگ کو تبدیل کرنا چاہتے ہیں، تو فہرست فہمی اشارے میں ہر عنصر کے لیے سٹرنگ کا طریقہ replace() استعمال کریں۔

اگر تبدیل کرنے کے لیے کوئی سٹرنگ نہیں ہے، تو 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()

سٹرنگ کا طریقہ 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']
Copied title and URL