ویدیو آموزش متدهای zip و enumerate در پایتون

September 2021

در این ویدیو با دو متد پرکاربر پایتون به نام‌های 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')]

 

ارسال نظر

تلاش میکنم سوالات شما را در کمتر از یک روز پاسخ بدم