انتقال آیتمهای یک لیست به لیستی دیگر
گاهی اوقات نیاز داریم که آیتمهای یک لیست را به یک لیست دیگر منتقل کنیم.
در مورد کپی آیتمهای یک لیست در لیست دیگر، روشهای متعددی مثل استفاده از حلقهی for یا
اسلایسها قابل استفاده هستند. اما اگر بخواهیم این یک عمل انتقال (move) باشد و نه
یک عمل کپی، بهترین کار این است که از یک حلقهی while استفاده کنیم.
فرض کنید لیستی داریم از کاربرانی که در سایت ما عضو شدهاند اما
هنوز عضویت آنها تأیید نشده است. میخواهیم بعد از تأیید، این کاربران به یک لیست دیگر
منتقل شوند، بهگونهای که لیست اول خالی شود. در کد زیر، لیست کاربران عضو شده را
registered_users نامیدهایم و لیست مقصد را که کاربران بعد از تأیید به آنجا منتقل
میشوند، confirmed_users نامیدهایم.
while_with_collections.py
registered_users = ["david", "jane", "alice"]
confimed_users = []
while registered_users:
item = registered_users.pop()
confimed_users.append(item)
print(f"Registered Users: {registered_users}")
print(f"Confirmed Users: {confimed_users}")
حلقهی while در این مثال به این معناست که تا زمانی که لیست registered_users خالی
نشده است، آخرین آیتم آن را حذف کن و آن را به لیست confirmed_users اضافه کن.
بنابراین، خروجی این کد به صورت زیر خواهد بود.
Registered Users: []
Confirmed Users: ['alice', 'jane', 'david']
حذف یک مقدار مشخص از لیست
در فصل سوم دیدیم که با استفاده از تابع remove() میتوانیم آیتمی با
یک مقدار مشخص را از یک لیست حذف کنیم. اما اگر آیتم مورد نظر بیش از
یک بار در لیست تکرار شده باشد و بخواهیم
همهی این آیتمها را حذف کنیم، میتوانیم این کار را به کمک
یک حلقهی while انجام دهیم.
به عنوان مثال، فرض کنید از ۷ نفر خواستهایم که نوع حیوان خانگی خودشان را
به ما بگویند و آنها را در یک لیست ذخیره کردهایم. ما میخواهیم گربه را از این لیست
حذف کنیم و این احتمال وجود دارد که نام این حیوان بیش از یک بار
در لیست آمده باشد. پس، از یک حلقهی while مانند زیر استفاده میکنیم.
while_with_collections.py
pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
print(pets)
while 'cat' in pets:
pets.remove('cat')
print(pets)
به این ترتیب، هر آیتمی که مقدارش cat باشد، از لیست حذف میشود و
بنابراین، خروجی این کد به صورت زیر خواهد بود.
['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
['dog', 'dog', 'goldfish', 'rabbit']
ذخیره ورودیهای کاربر در یک دیکشنری
یکی دیگر از مزایای استفاده از while به همراه کالکشنها این است که
میتوانیم هر تعداد ورودی را از کاربر دریافت کنیم و آنها را در یک
کالکشن مثل دیکشنری ذخیره کنیم.
فرض کنید قصد داریم یک نظرسنجی در مورد بهترین فوتبالیست تاریخ
انجام دهیم و در پایان، پاسخها را نمایش دهیم. به کد زیر دقت کنید.
while_with_collections.py
responses = {}
polling_active = True
while polling_active:
name = input("\nWhat is your name? ")
response = input("Who is the best football player? ")
responses[name] = response
repeat = input("Would you like to let another person respond? (yes/ no) ")
if repeat == 'no':
polling_active = False
print("\n--- Poll Results ---")
for name, response in responses.items():
print(f"{name} selects {response}.")
کاری که این حلقهی while انجام میدهد این است که از کاربر نام و
نظرش را می پرسد و آن را در دیکشنری responses ذخیره میکند.
سپس، از کاربر سؤال میکند که آیا شخص دیگری هم در نظرسنجی شرکت میکند یا خیر.
اگر کاربر مقدار no را وارد کند، حلقه متوقف میشود و در غیر این صورت، تکرار بعدی رخ میدهد و نام و
نظر نفر بعدی را هم به دیکشنری responses اضافه میکند. در پایان نیز از یک حلقهی for
استفاده شده تا نام و نظر هر کاربر نمایش داده شود.