حذف عضو از همون فهرستی که رویش حلقه میزنیم میتونه باعث جاافتادن عضو بعدی بشه. اندیسها بعد از حذف جابهجا میشن، اما حلقه به موقعیت بعدی میره. برای ساخت یک فیلتر، راه سادهتر اینه که خروجی تازه بسازیم و فقط عضوهای مناسب رو داخلش بریزیم. این کار قرارداد «ورودی تغییر نکند» رو هم رعایت میکنه.
مثال رشتههای غیرخالی رو در فهرست جدا نگه میداره. فعالیت حذف عددهای منفی رو میخواد و صفر باید باقی بمونه. خطای رایج آزمون با منفیهای جدا از هم است؛ در اون حالت باگ جاافتادن ممکنه دیده نشه. دو منفی پشت سر هم ورودی بهتری برای بازتولید هستن. کمکی inspect_filter هم نتیجه و هم وضعیت ورودی بعد از اجرا رو برمیگردونه، پس فقط درستبودن خروجی کافی نیست. تابع باید ترتیب عضوهای باقیمانده رو حفظ کنه و نباید برای راحتی، فهرست رو مرتب یا از آن remove انجام بده.
✍️ مثال حلشده:
def nonempty_texts(values):
result = []
for value in values:
if value != "":
result.append(value)
return result
حالا نوبت توئه: without_negatives(values) فهرست تازهای از عددهای صحیح نامنفی، با ترتیب قبلی، برگرداند و values را تغییر ندهد. [-2,-1,0,3]=>[0,3] و []=>[]. کمکی inspect_filter باید {"result":[0,3],"original":[-2,-1,0,3]} بدهد. باگ remove داخل پیمایش را اصلاح کن؛ صفر باید حفظ شود.
فعالیت شما
without_negatives(values) فهرست تازهای از عددهای صحیح نامنفی، با ترتیب قبلی، برگرداند و values را تغییر ندهد. [-2,-1,0,3]=>[0,3] و []=>[]. کمکی inspect_filter باید {"result":[0,3],"original":[-2,-1,0,3]} بدهد. باگ remove داخل پیمایش را اصلاح کن؛ صفر باید حفظ شود.