ویدیو آموزش متدهای zip و enumerate در پایتون
در این ویدیو با دو متد پرکاربر پایتون به نامهای zip و enumerate آشنا میشوید. این دو متد برای کار با آبجکتهای iterable استفاده میشوند.
اگر نمیداند که آبجکتهای iterable چی چیزی هستند، میتوانید ویدیو آشنایی با مفهوم iterate در پایتون را مشاهده کنید. همچنین برای شروع برنامه نویسی پایتون میتوانید دوره آموزش پایتون را مشاهده کنید.
متد zip پایتون
فرض کنید ما دو لیست داریم ، یکی شامل نام ها و دیگری شامل نام خانوادگی است. ما می خواهیم به نوعی نامها را با نامهای خانوادگی مربوط به صورت چندتایی ترکیب کنیم. به عبارت دیگر ، ما می خواهیم عناصری از چندین نام تکرار شونده که دارای index یکسانی هستند را در لیستی از چندتایی ترکیب کنیم:
list_1 = [‘Jane’, ‘John’, ‘Jennifer’]
list_2 = [‘Doe’, ‘Williams’, ‘Smith’]
Desired Output:
[('Jane', 'Doe'), ('John', 'Williams'), ('Jennifer', 'Smith')]
ما می توانیم این کار را با تابع zip () که یک تابع پایتون داخلی است انجام دهیم. تابع zip () به دلیل مکانیزم مشابه زیپ های فیزیکی نامگذاری شده است. وقتی چیزی را فشرده می کنید، هر دو طرف را به هم نزدیک می کنید. و عملکرد zip () به این صورت است! این عناصر از index یکسانی از چندین شی iterable را به عنوان عناصر یکپارچه یکسان جمع می کند.
تابع zip() یک آرگومان، مانند لیست، فایل، tuple، set و غیره که قابلیت پیمایش هستند را میگیرد و سپس یک آبجکت قابل پیمایش جدید از ترکیب آنها ایجاد می کند.
first_names = [‘Jane’, ‘John’, ‘Jennifer’]
last_names = [‘Doe’, ‘Williams’, ‘Smith’]
full_names = list(zip(first_names, last_names))
print(full_names)
# [('Jane', 'Doe'), ('John', 'Williams'), ('Jennifer', 'Smith')]
متد zip با سه آرگومان در پایتون
شما میتوانید به متد zip هر تعداد آرگومان که میخواهید ارسال کنید. در مثال پایین ما سه آرگومان را به متد zip ارسال کردهایم:
first_names = ['Jane', 'John', 'Jennifer']
last_names = ['Doe', 'Williams', 'Smith']
ages = [20, 40, 30]
names_and_ages = list(zip(first_names, last_names, ages))
print(names_and_ages)
# [('Jane', 'Doe', 20), ('John', 'Williams', 40), ('Jennifer', 'Smith', 30)]
ارسال یک آرگومان به متد zip پایتون
اگر فقط یک آرگومان به متد zip ارسال کنید، یک آبجکت از تاپلهای تک عضوی خواهید داشت:
first_names = ['Jane', 'John', 'Jennifer']
print(list(zip(first_names)))
# [('Jane',), ('John',), ('Jennifer',)]
ارسال آرگومانهایی با آیتمهای نابرابر به متد zip پایتون
اگر آرگومانهایی که به متد zip ارسال میکنید تعداد آیتمهای برابری نداشته باشند، آیتمهای اضافی به صورت اتوماتیک حذف میشوند. در مثال زیر لیست first_names دارای سه آیتم و لیست last_name دارای چهار آیتم است که در نتیجه آیتم jones حذف خواهد شد:
first_names = [‘Jane’, ‘John’, ‘Jennifer’]
last_names = [‘Doe’, ‘Williams’, ‘Smith’, 'Jones']
full_names = list(zip(first_names, last_names))
print(full_names)
# [('Jane', 'Doe'), ('John', 'Williams'), ('Jennifer', 'Smith')]
استفاده از متد zip در حلقه for
یکی از کاربردهای متد zip استفاده داخل حلقههای for میباشد:
first_names = ['Jane', 'John', 'Jennifer']
last_names = ['Doe', 'Williams', 'Smith']
for first, last in zip(first_names, last_names):
print(first, last)
# Output:
Jane Doe
John Williams
Jennifer Smith
استفاده از unzip به عنوان معکوس متد zip در پایتون
فرض کنید که لیست به مانند زیر دارید:
first_and_last_names = [('Jane', 'Doe'), ('John', 'Williams'), ('Jennifer', 'Smith')]
اگر بخواهید آیتمهای این لیست را از هم جدا کنید میتوانید متد zip را کنار علامت ستاره * استفاده کنید:
first_names, last_names = zip(*first_and_last_names)
first_names = list(first_names)
last_names = list(last_names)
print(first_names) # ['Jane', 'John', 'Jennifer']
print(last_names) # ['Doe', 'Williams', 'Smith']
متد enumerate پایتون
Enumerate یک متد داخلی پایتون است. نمی توان مفید بودن آن را در یک خط خلاصه کرد. با این حال، اکثر تازه واردان و حتی برخی از برنامه نویسان حرفهای از آن بی اطلاع هستند. این به ما اجازه می دهد تا روی چیزی حلقه بزنیم و یک شمارنده خودکار داشته باشیم. به عنوان مثال:
my_list = ['apple', 'banana', 'grapes', 'pear']
for counter, value in enumerate(my_list):
print counter, value
# Output:
# 0 apple
# 1 banana
# 2 grapes
# 3 pear
و موارد بیشتری وجود دارد! enumerate همچنین یک آرگومان اختیاری را می پذیرد که به ما اجازه می دهد شاخص شروع شمارنده را مشخص کنیم.
my_list = ['apple', 'banana', 'grapes', 'pear']
for c, value in enumerate(my_list, 1):
print(c, value)
# Output:
# 1 apple
# 2 banana
# 3 grapes
# 4 pear
نمونه ای از مواردی که enumerate برشمردن مفید است، ایجاد tuple حاوی item و index با استفاده از یک لیست است. به عنوان مثال:
my_list = ['apple', 'banana', 'grapes', 'pear']
counter_list = list(enumerate(my_list, 1))
print(counter_list)
# Output: [(1, 'apple'), (2, 'banana'), (3, 'grapes'), (4, 'pear')]
ارسال نظر