تک ویت امید

zip() در پایتون


توی این سری مقالات می‌خوایم درمورد پایتون حرف بزنیم و صرفا آموزش پایه‌ی پایتون نباشه و کمی پیشرفته تر باشه و به مرور پیشرفته تر میشه. در پست قبلی درمورد نحوه کار round() بود. و در این پست قصد دارم که درمورد zip() بگم.

به طور کلی اگه بخوایم بگیم کار zip() اینکه دو یا چند دیتاست مختلف مثل لیست و تیوپل و … رو بگیره و باهم دیگه بر اساس ایندکس هاشون باهم دیگه ترکیب و برامون توی یه آبجکت برمیگردونه.

اینجوری بگیم بهتره کاری که میکنه اینکه اولین آیتم از لیست اول رو با لیست دوم رو برامون باهم دیگه pair میکنه و ایندکس دوم لیست اول رو با ایندکس دوم لیست دوم و همینطور ادامه پیدا مکینه، اگه با مثال بگیم بهتره.

چطوری از zip() استفاده کنیم.

سینتکس کلی به این شکله:

zip(dataSet1, dataSet2, ...)

یه مثال عملی از نحوه کارش ببینیم:

names = ('omid', 'ali', 'mamad')
ages = (4, 5, 6)

print(zip(names, ages))
# <zip at 0x7fe9a4671500>

توی کد بالا ما دوتا tuple ساختیم ‍‍names و ages.

بعد هم اونارو zip() کردیم: print(zip(names, ages))

ولی ما چیزی که ازش خواستیم رو برامون برنگردوند و بجاش یه آبجکت نامبر برامون return کرد. و دلیلشم اینکه باید بهش بگیم که توی چه دیتاستی برامون return کنه. اینجا رو ببینید:

names = ('omid', 'ali', 'mamad')
ages = (4, 5, 6)

zipped = zip(names, ages)

print(tupple(zipped))
# (('omid', 4), ('ali', 5), ('mamad', 6))

در اینجا ما دیتای zip شده رو توی یه متغییر به اسم zipped گذاشتیم و ازش خواستیم که اونو در قالب tuple برامون پرینت کنه:

print(tuple(zipped))

و مثل همون مثال بالا میتونیم از list, dict, set استفاده کنیم ولی باید توجه کنیم که خروجی که set بهمون میده ترتیب رو رعایت نمیکنه که از خاصیت های set هستش.

و همچنین میتونیم دیتای zip شده رو حلقه بزنیم:

names = ('omid', 'ali', 'mamad')
ages = (4, 5, 6)

zipped = zip(names, ages)

for (x, y) in zipped:
    print(x, y)

# omid, 4 
# ali, 5
# mamad, 6

اگر میخواید بیشتر درمورد زیپ فانکشن در پایتون یادبگیرید قطعا بهترین گزینه داکیومنت های خود پایتونه و یا این آموزش از سایت realpython که خیلی خوب توضیح داده.