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

امیرحسین بیگدلو June 2023

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

 

ویدیوهای مشابه



ارسال نظر


محمد

8 ماه قبل پاسخ به نظر

سلام لطفا امکان دانلود ویدیوهای تک قسمتی رو اضافه بفرمایید.هر جایی امکان دسترسی به اینترنت مناسب نیست.ممنون از شما

ارسال نظر



آرایش

2 سال قبل پاسخ به نظر

سلام
توی معکوس zip چطور میتونیم از * استفاده کنیم.
من هرچه سعی میکنم بجای ستاره *ضربدر قرار میده.
یا بعبارت دیگه.ستاره بالا قرار نمیگیره و مساوی اندیس لیستم قرار میگیره،و اررور میده.
ممنون از راهنمایتون

ارسال نظر



مونگارد