در این آموزش یاد میگیریم که تابع zip در پایتون چطور کار میکنه؟! و چطور میشه دو یا چند لیست، تاپل و غیره رو باهم دیگه متناظر کرد؟! تمام آموزش مثال محور هست و سعی میکنیم با مثال مباحث رو جا بندازیم!
شاید اول خیلی متوجه حرفم نشید، اما آخر مطلب هم دوباره بهتون یادآوری میکنم تا این بخش رو بخونید! اونجا دیگه قطعاً با تمام وجود متوجه میشید اصلاً چرا بهش میگن zip !
یک لبه زیب زیر رو مثلاً لیست x در نظر بگیرید و یک لبه دیگه زیپ زیر رو y در نظر بگیرید! (توی تصویر هم برای راحتی شما، اسم گذاری کردیم!)
همینطور که میدونید وقتی زیپ رو میبندید، این دو لبه بهم چِفت میشن و روبروی هم قرار میگیرن! یعنی به عبارتی عناصر دو لیست x و y دو به دو متناظر هم میشن!
این از دلیل اینکه چرا بهش میگن zip !
بریم که در ادامه با چندتا مثال، مبحث رو مسلط بشیم!
فرض کنید 5 تا نقطه داریم که x این نقاط عبارت است از:!
x=[1,2,2,3,3]
و فرض کنید y این نقاط هم عبارت است از:!
y=[1,1,2,1,2]
حالا فرض کنید میخوایم این x و y نقاط رو به صورت زوج مرتب و دوتایی باهم متناظر کنیم، یعنی میخوایم تَهِش خروجی بشه!:
[(1, 1), (2, 1), (2, 2), (3, 1), (3, 2)]
برای این کار از تابع zip در پایتون (python) و به صورت زیر استفاده میکنیم!
x=[1,2,2,3,3] y=[1,1,2,1,2] koolac=list(zip(x,y)) print(koolac)
در خط 1 و 2 که لیست x و y خودمون رو تعریف کردیم!
در بخشی از خط 3 گفتیم:
zip(x,y)
این میاد عناصر لیست x و y رو دو به دو (یعنی مثل زوج مرتب) باهم متناظر میکنه! (دقیقاً مثل موفعی که زیپ کیف رو میبندیم و دو لبهی زیب کنار هم قرار میگیرن!)
اما این خودش قابل نمایش نیست! برای همین اومدیم این بندهخدا رو سپردیم به دستِ تابع list (که تابع list، اینه که چیزمیزهای مختلف رو به لیست تبدیل کنه!) تا این بندهخدا رو به لیست تبدیل کنه!
شاید بپرسید چرا قابل نمایش نیست؟! مگه چِشِه؟! جوابش رو میدم، ولی اگر سطح پایتون خوبی نداشته باشید، متوجه نمیشید! ولی مهم نیست بیخیال بشید! هدف یادگیری تابع zip در پایتون است! نمیخواد درگیر حاشیه بشیم!
اما دلیلش اینه که این بندهخدا عملاً یک object (یا شی) خروجی میده که قطعاً اگر یه وقتی به سرمووون بزنه که پرینتش کنیم یه عبارت شبهِ خوف و خفنی به صورت زیر میبینیم!
<zip object at 0x000000E45E4F3108>
و دقیقاً به همین دلیل بود که به list تبدیلش کردیم تا بتونیم ببینیمِش!
خلاصه… ! داشتم میگفتم…! در خط 3 اومدیم x و y رو باهم متناظر کردیم و با تابع list هم به لیست تبدیلش کردیم و درنهایت هم اینا رو ریختیم توی متغیری به اسم koolac ! (واضخه که هر اسمی میتونست باشه! من به دلیل تعصب روی “کولاک” همچین اسمی رو انتخاب کردم!)
در خط آخر هم که داریم همین koolac رو چاپ میکنیم!
خروجی:
[(1, 1), (2, 1), (2, 2), (3, 1), (3, 2)]
به محض اینکه مثال 1 رو دیدید، قطعاً دارید میپرسید خب اگر بیشتر از دوتا لیست رو خواستیم به هم متناظر کنیم، چه کنیم؟! هیچی، خیلی ساده به طریق مشابه عمل میکنیم! من دیگه چون عیناً شبیه بالا است، از توضیحات اضافه خودداری میکنم و فقط کُد این مثال رو بهتون نشون میدم!
p=["A","B","C","D","E"] x=[1,2,2,3,3] y=[1,1,2,1,2] koolac=list(zip(p,x,y)) print(koolac)
دیگه از روز روشنتره که اگر بیشتر از 3 تا رو بخواید متناظر کنید میتونید به طریق مشابه ار تابع zip در پایتون استفاده کنید!
لزوماً قرار نیست شما بیاید دوتا لیست رو بهم zip کنید! میتونید دو تا تاپل و غیره رو هم همین بَلا رو سرش بیارید! شاید بپرسید، میشه مخلوط کار کرد؟! یعنی یه لیست و تاپل رو متناظر کرد (zip کرد)؟! جواب بازهم مثبته!
قرار شد آخر مطلب دوباره بهتون یادآوری کنم که برید چیزمیزای نوشته شده در تیتر اول مطلب (همون تیترِ “چرا بهش میگن zip و اصلاً چه ربطی داره؟!”) رو بخونید! تا با تمام وجود مبحث رو درک کنید!
این آموزش هم تمووووم شد، ان شاء الله مفید بوده باشه!
خب الان ما دیدیم که چطور میشه چندتا لیست/آرایه و غیره رو باهم متناظر کرد! حالا سوال پیش میاد که چجوری میشه معکوس این عمل رو انجام داد؟! یعنی چیزی که zip شده رو بیایم unzip کنیم و از هم جداشوووووون کنیم؟! جواب رو باید در مطلب زیر مشاهده کنید!
دستور zip(*) برای معکوس تابع zip در پایتون
آموزش تابع shuffle در پایتون (برای بهم ریختن ترتیب یک لیست یا آرایه) !
تعداد دیدگاه | 4 |
تعداد بازدید | 9.6K |
تاریخ انتشار | 23/11/2019 |
تاریخ بروزرسانی | 23/11/2019 |
نویسنده | گروه آموزشی کولاک |