تابع zip() Python با مثال های ساده توضیح داده شده است
تابع zip()
در پایتون یک ابزار منظم است که به شما امکان می دهد چندین فهرست یا تکرارپذیرهای دیگر (مانند تاپل ها، مجموعه ها یا حتی رشته ها) را در یک تاپل تکرار شونده ترکیب کنید. آن را مانند یک زیپ روی یک ژاکت در نظر بگیرید که دو طرف را به هم نزدیک می کند.
در این راهنما، زیر و بم تابع zip()
را با مثالهای ساده و کاربردی تحلیل میکنیم که به شما در درک نحوه استفاده مؤثر از آن کمک میکند.
تابع zip()
چگونه کار می کند؟
تابع zip()
عناصر را از تکرارپذیرهای متعدد، مانند فهرست ، بر اساس موقعیت آنها جفت می کند. این بدان معنی است که عناصر اول هر فهرست جفت می شوند، سپس دومی و غیره. اگر طول تکرارپذیرها یکسان نباشد، zip()
در انتهای کوتاهترین تکرار متوقف میشود.
نحو برای zip()
بسیار ساده است:
zip(*iterables)
شما می توانید چندین تکرار (لیست ها، تاپل ها و غیره) را ارسال کنید و آن ها را به تاپل ها ترکیب می کند.
مثال 1: ترکیب دو فهرست
بیایید با یک مورد ساده شروع کنیم که در آن دو فهرست داریم و قصد داریم آنها را ترکیب کنیم. تصور کنید فهرستی از اسامی و فهرستی از نمرات مربوطه دارید و می خواهید آنها را با هم جفت کنید.
# Two lists to combine names = [ "Alice" , "Bob" , "Charlie" ] scores = [ 85 , 90 , 88 ] # Using zip() to combine them zipped = zip(names, scores) # Convert the result to a list so we can see it zipped_list = list(zipped) print(zipped_list)
در این مثال، تابع zip()
دو فهرست - names
و scores
- را می گیرد و آنها را عنصر به عنصر جفت می کند. اولین عنصر از names
( "Alice"
) با اولین عنصر از scores
( 85
) و غیره جفت می شود. وقتی نتیجه را به یک فهرست تبدیل می کنیم، به نظر می رسد:
خروجی:
[( 'Alice' , 85 ), ( 'Bob' , 90 ), ( 'Charlie' , 88 )]
این کار کار با داده های مرتبط را به روشی ساختاریافته آسان می کند.
مثال 2: وقتی فهرست ها ناهموار هستند چه اتفاقی می افتد؟
فرض کنید فهرست هایی با طول های مختلف دارید. آن وقت چه اتفاقی می افتد؟ تابع zip()
آنقدر هوشمند است که به محض رسیدن به انتهای کوتاهترین فهرست متوقف می شود.
# Lists of different lengths fruits = [ "apple" , "banana" ] prices = [ 100 , 200 , 150 ] # Zipping them together result = list(zip(fruits, prices)) print(result)
در این مورد، فهرست fruits
دارای دو عنصر و فهرست prices
دارای سه عنصر است. اما zip()
تنها دو عنصر اول را با هم ترکیب میکند و ارزش اضافی prices
را نادیده میگیرد.
خروجی:
[( 'apple' , 100 ), ( 'banana' , 200 )]
توجه کنید که چگونه آخرین مقدار ( 150
) در فهرست prices
نادیده گرفته می شود زیرا میوه سومی برای جفت کردن آن وجود ندارد. تابع zip()
تضمین میکند که هنگام کار با فهرست های ناهموار با خطا مواجه نمیشوید، اما همچنین به این معنی است که اگر فهرست های شما متعادل نباشند، ممکن است برخی از دادهها را از دست بدهید.
مثال 3: باز کردن یک شی زیپ شده
اگر بخواهید عملیات zip()
را معکوس کنید چه؟ به عنوان مثال، پس از فشرده سازی دو فهرست با هم، ممکن است بخواهید آنها را به فهرست های جداگانه تقسیم کنید. شما می توانید این کار را به راحتی با استفاده از عملگر unpacking *
انجام دهید.
# Zipped lists cities = [ "New York" , "London" , "Tokyo" ] populations = [ 8000000 , 9000000 , 14000000 ] zipped = zip(cities, populations) # Unzipping them unzipped_cities, unzipped_populations = zip(*zipped) print(unzipped_cities) print(unzipped_populations)
در اینجا، ابتدا فهرست cities
و populations
را با هم فشرده می کنیم. سپس، با استفاده از zip(*zipped)
، میتوانیم تاپلهای ترکیب شده را به دو فهرست جداگانه بازگردانیم. اپراتور *
تاپل های زیپ شده را در اجزای اصلی خود باز می کند.
خروجی:
( 'New York' , 'London' , 'Tokyo' ) ( 8000000 , 9000000 , 14000000 )
این نشان میدهد که چگونه میتوانید فرآیند zipping را معکوس کنید تا دادههای اصلی را برگردانید.
مثال 4: فشرده سازی بیش از دو فهرست
شما فقط به دو فهرست با zip()
محدود نمی شوید. می توانید هر تعداد تکرار شونده را که می خواهید زیپ کنید. در اینجا یک مثال با سه فهرست آورده شده است.
# Three lists to zip subjects = [ "Math" , "English" , "Science" ] grades = [ 88 , 79 , 92 ] teachers = [ "Mr. Smith" , "Ms. Johnson" , "Mrs. Lee" ] # Zipping three lists together zipped_info = zip(subjects, grades, teachers) # Convert to a list to see the result print(list(zipped_info))
در این مثال، ما سه فهرست را فشرده می کنیم - subjects
، grades
و teachers
. اولین مورد از هر فهرست با هم گروه بندی می شود، سپس مورد دوم و غیره.
خروجی:
[( 'Math' , 88 , 'Mr. Smith' ), ( 'English' , 79 , 'Ms. Johnson' ), ( 'Science' , 92 , 'Mrs. Lee' )]
به این ترتیب، میتوانید چندین بخش از اطلاعات مرتبط را در تاپلهایی با سهولت مدیریت ترکیب کنید.
مثال 5: زیپ رشته ها
رشتهها نیز در پایتون قابل تکرار هستند، پس میتوانید مانند فهرست ها روی آنها فشرده کنید. بیایید سعی کنیم دو رشته را با هم ترکیب کنیم.
# Zipping two strings str1 = "ABC" str2 = "123" # Zipping the characters together zipped_strings = list(zip(str1, str2)) print(zipped_strings)
در اینجا اولین کاراکتر str1
با اولین کاراکتر str2
ترکیب می شود و به همین ترتیب.
خروجی:
[( 'A' , '1' ), ( 'B' , '2' ), ( 'C' , '3' )]
این به ویژه در صورتی مفید است که شما نیاز به پردازش یا جفت کاراکترهای چند رشته با هم دارید.
مثال 6: دیکشنری های فشرده
اگرچه دیکشنری ها کمی با فهرست ها متفاوت هستند، اما همچنان می توانید از zip()
برای ترکیب آنها استفاده کنید. به طور پیش فرض، zip()
فقط کلیدهای دیکشنری را فشرده می کند. بیایید به یک مثال نگاه کنیم:
# Two dictionaries dict1 = { "name" : "Alice" , "age" : 25 "} dict2 = {" name ": " Bo b", " age ": 30" } # Zipping dictionary keys zipped_keys = list(zip(dict1, dict2)) print(zipped_keys)
در اینجا، zip()
کلیدهای هر دو دیکشنری را جفت می کند.
خروجی:
[( 'name' , 'name' ), ( 'age' , 'age' )]
اگر می خواهید مقادیر دیکشنری ها را فشرده کنید، می توانید این کار را با استفاده از متد .values()
انجام دهید:
zipped_values = list(zip(dict1.values(), dict2.values())) print(zipped_values)
خروجی:
[( 'Alice' , 'Bob' ), ( 25 , 30 )]
حالا به راحتی می توانید مقادیر دو دیکشنری را با هم ترکیب کنید.
مثال 7: استفاده از zip()
در حلقه ها
یکی از رایج ترین کاربردهای zip()
در حلقه ها است که می خواهید چندین فهرست را همزمان پردازش کنید. در اینجا یک مثال است:
# Lists of names and scores names = [ "Alice" , "Bob" , "Charlie" ] scores = [ 85 , 90 , 88 ] # Using zip() in a loop for name, score in zip(names, scores): print( f" {name} scored {score} " )
این حلقه روی فهرست names
و scores
به طور همزمان تکرار می شود و هر نام را با امتیاز مربوطه جفت می کند.
خروجی:
Alice scored 85 Bob scored 90 Charlie scored 88
استفاده از zip()
در حلقههایی مانند این باعث میشود کد شما هنگام کار با دادههای مرتبط، پاکتر و راحتتر خوانده شود.
نتیجه گیری
تابع zip()
یک ابزار مفید در پایتون است که به شما امکان میدهد چندین تکرار را در تاپلها ترکیب کنید و کار با دادههای مرتبط را آسانتر کند. فرقی نمیکند آیتمها را از فهرست ها، تاپلها یا رشتهها جفت کنید، zip()
کد شما را ساده میکند و میتواند به ویژه در حلقهها مفید باشد.
با مثالهای موجود در این مقاله، اکنون باید درک خوبی از نحوه استفاده zip()
در سناریوهای مختلف داشته باشید.
اگر این توضیح تابع zip()
پایتون را مفید یافتید، ممکن است از آموزشها و مفاهیم برنامهنویسی عمیقتری که در وبلاگم پوشش میدهم لذت ببرید.
کد نویسی مبارک!
ارسال نظر