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 که خیلی خوب توضیح داده.