میدونیم که تابع zip میاد چند لیست/آرایه و غیره رو باهم جُفت و متناظر میکنه! اما معکوس تابع zip در پایتون چیست؟! جواب دستور zip(*) در پایتون است که ما در این مطلب با مثال به طور کامل آموزشش میدیم!
خب اگر یادتون باشه در مطلب زیر در مورد دستور zip صحبت کردیم!
تابع zip در پایتون برای متناظر کردن چندین لیست، تاپل و غیره
همون انتهای مطلبِ این پست بالا این مورد رو مطرح کردیم که حالا اگر بخوایم یه چیزی که با دستور zip ساخته شده رو بخوایم unzip کنیم، باید چه کنیم؟! یعنی درواقع سوال اینه که: معکوس تابع zip در پایتون چیست؟!
هشدار جدی: دیگه از روز روشنتره که این مطلب، برمطلب بالا (که لینکش رو گذاشتم!) بنا شده! پس اگر اون رو بَلَد نباشید و بیاید اینجا، واویلا است! چون هیچی نمیفهمید! (تضمین میدم! پس اول برید اون رو بخونید، بعد بیاید اینجا!)
حالا بریم که با مثال، این مبحث رو جا بندازیم!
فرض کنید با دستور zip در پایتون (که قبلاً آموزش دادیم و لینکش رو بالا گذاشتم!) چیزی شبیه این چیزی که در پایین میبینید، ساختیم!
[(1, 'A'), (2, 'B'), (3, 'C')]
همینطور که میبینید اعضای مختلف با هم متناظر شدن! مثلا:
1 متناظر است با A !
2 متناظر است با B !
3 متناظر است با C !
حالا ما اگر بخوایم اینا رو از هم جدا بکنیم، باید چه بکنیم؟! شاید بپرسید یعنی چی جدا بکنیم؟! یعنی اینکه تهِش برسیم به دو مولفه به صورت زیر:
یکی مثلاً اسمش باشه x و برابر باشه با!:
[1, 2, 3]
که در واقع همون مولفههای اول در تناظرهای بالا است!
و یک چیز دیگه مثل y هم باشه، به صورت زیر!
[‘A’, ‘B’, ‘C’]
که این هم درواقع مولفههای دوم در هموووون تناظرهای بالا است!
برای انجام این چیزمیزایی که گفتیم، باید به صورت زیر عمل کنیم! (اول قطعه کد زیر رو در نظر بگیرید تا بعد خط به خط توضیح بدم!)
x,y=zip(*z) print(x) print(y)
خب! اینو یادتون باشه که دستور زیر عکس تابع zip عمل میکنه!
zip(*)
یعنی اگر یادتون باشه، دستور zip میومد متناظر میکرد، اما دستور zip(*) میاد معکوس تابع zip در پایتون عمل میکنه و اووونهایی که متناظر شدن رو از هم جدا میکنه!
پس در خط 1 با دستور زیر، رسماً گفتیم که متغیر z رو (که یک سری چیز میز در اووون متناظر شده بودند!) رو از حالت تناظر در بیار و جُداش کن!
zip(*z)
خب! حالا قبول دارید وقتی جدا میکنه، دوتا خروجی میده؟! (طبیعتاً یکی مولفه اول و یکی مولفه دوم دیگه!)
برای همین که دوتا خروجی میده، اون شکلی خروجیش رو به دوتا متغیر نسبت دادیم و خروجیش رو (که درواقع دوتا چیز هست!) ریختیم توووی دوتا متغیر به نام x و y !
در دو خط آخر هم این x و y رو چاپ کردیم!
خروجی:
(1, 2, 3)
(‘A’, ‘B’, ‘C’)
شاید اونهایی که دستی در کار دارند، بگن: خروجی بالا که به صورت tuple است! ما تاپل نمیخوایم! ما list میخوایم!
خب این که دیگه خیلی کاری نداره! کافیه با تابع list بیاید این دوستان (یعنی x و y) رو به لیست تبدیل کنید! یعنی فقط کافی است موارد زیر رو (اگر حساس هستید که حتماً list خروجی بده!) به کد بالا اضافه کنید!
x=list(x) y=list(y) print(x) print(y)
میبینید که در خط اول، x رو با تابع list، به لیست تبدیل میکنه و مجدداً میریزه تووی متغیر x. (یعنی عملاً بروزرسانی میکنه!)
در خط دوم هم مشابه خط اول، برای y همین کار رو میکنه!
در خط 3 و 4 هم که پرینت میکنه دیگه!
خروجی:
[1, 2, 3]
[‘A’, ‘B’, ‘C’]
این هم ازخروجی به صورت لیست!
تعداد دیدگاه | 2 |
تعداد بازدید | 4.3K |
تاریخ انتشار | 25/11/2019 |
تاریخ بروزرسانی | 25/11/2019 |
نویسنده | گروه آموزشی کولاک |