تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

    آموزش استفاده از تابع Zip در زبان Python

    آموزش استفاده از تابع zip در زبان python

    وجود برخی توابع built-in در زبان Python کار شما را به‌عنوان یک برنامه‌نویس ساده‌تر می‌کند. به‌همین منظور تصمیم داریم در این مقاله شما را با نحوه‌ی استفاده از تابع zip() آشنا کنیم.

    معرفی تابع Zip

    مطمئنا قبل از کار کردن با تابع Zip باید درک درستی از عملکرد آن داشته باشید. این تابع با سینتکس:

    zip(iterator1, iterator2, iterator3 ...)

    چندین توالی قابل پیمایش مانند لیست‌ها، دیکشنری‌ها و رشته‌ها را به‌عنوان آرگومان‌های ورودی دریافت کرده و درنهایت یک آبجکت قابل پیمایش را return می‌کند. حال بیایید توضیحات تئوری را کنار گذاشته و یک مثال واقعی را برای درک بهتر عملکرد این تابع اجرا کنیم:

    player_numbers = [7, 9, 10]
    player_names = ['Cristiano Ronaldo', 'Gareth Bale', 'Lionel Messi']
    
    player_data = zip(player_numbers, player_names)
    
    print(list(player_data)) # Output: [(7, 'Cristiano Ronaldo'), (9, 'Gareth Bale'), (10, 'Lionel Messi')]

    درمثال فوق، نام و شماره‌ی برخی از بازیکنان مشهور فوتبال را Zip کرده‌ایم و همان‌طور که مشاهده می‌کنید، تابع Zip مانند یک زیپ فیزیکی عمل کرده است یعنی مقادیری با ایندکس‌های مشابه در لیست‌های player_numbers و player_names را در کنار هم قرار داده و درنهایت آن‌ها را return می‌کند. البته باید توجه داشته باشید که برای دسترسی مستقیم به داده‌های player_data باید نوع آن را به لیست تبدیل کنید.

    zip کردن دو لیست

    نحوه‌ی استفاده از تابع Zip

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

    هر تعداد توالی قابل پیمایش مورد نیاز خود را Zip کنید

    همان‌طور که از سینتکس این تابع پیداست، شما می‌توانید توالی‌های مختلفی را به‌عنوان آرگومان ورودی به تابع Zip پاس دهید. برای مثال بیایید سه لیست مختلف را Zip کنیم:

    player_numbers = [7, 9, 10]
    player_names = ['Cristiano Ronaldo', 'Gareth Bale', 'Lionel Messi']
    teams = ['Juventus', 'Real Madrid', 'FC Barcelona']
    
    player_data = zip(player_numbers, player_names, teams)
    
    print(list(player_data)) # Output: [(7, 'Cristiano Ronaldo', 'Juventus'), (9, 'Gareth Bale', 'Real Madrid'), (10, 'Lionel Messi', 'FC Barcelona')]

    ادعام لیست‌هایی با طول متفاوت با استفاده از تابع Zip

    در نگاه اول ممکن است فکر کنید که توالی‌ها باید از طول یکسانی برخوردار باشند اما در اصل نیازی به یکسان بودن طول توالی‌ها نیست:

    player_numbers = [7, 9]
    player_names = ['Cristiano Ronaldo', 'Gareth Bale', 'Lionel Messi']
    
    player_data = zip(player_numbers, player_names)
    
    print(list(player_data)) # Output: [(7, 'Cristiano Ronaldo'), (9, 'Gareth Bale')]

    همان‌طور که مشاهده می‌کنید، طول لیست ادغام شده برابر با کوتاه‌ترین طول توالی آرگومان‌های ورودی تابع Zip است و ایندکس سوم توالی player_names نادیده گرفته شده است.

    zip کردن دو لیست با طول‌های متفاوت

    البته درصورتی که بخواهید هیچکدام از مقادیر توالی‌ها نادیده گرفته نشود، می‌توانید از تابع zip_longest() به‌شکل زیر استفاده کنید:

    from itertools import zip_longest
    
    player_numbers = [7, 9]
    player_names = ['Cristiano Ronaldo', 'Gareth Bale', 'Lionel Messi']
    
    player_data = zip_longest(player_numbers, player_names)
    
    print(list(player_data)) # Output: [(7, 'Cristiano Ronaldo'), (9, 'Gareth Bale'), (None, 'Lionel Messi')]

    توجه داشته باشید که برای استفاده از تابع zip_longest() نیاز است آن را از ماژول Itertools در کدهای خود import کرده باشید. اگر نگاهی به خروجی‌ها بیندازید، این تابع مقدار None را برای مقدار ناموجود در توالی player_numbers قرار داده است اما شما می‌توانید مقدار پیش‌فرض دیگری را به‌صورت زیر تنظیم کنید:

    player_data = zip_longest(player_numbers, player_names, fillvalue=0)

    Unzip کردن با استفاده از تابع Zip

    unzip کردن یک لیست

    در زبان Python هیچ تابع built-in برای Unzip کردن وجود ندارد بنابراین ما قصد داریم از تابع Zip برای Unzip کردن توالی‌ها استفاده کنیم. در این حالت از asterisk یا همان * استفاده خواهیم کرد:

    player_data = [(7, 'Cristiano Ronaldo'),
                   (9, 'Gareth Bale'),
                   (10, 'Lionel Messi')]
    numbers, names = zip(*player_data)
    
    print(numbers)  # Output: (7, 9, 10)
    print(names)  # Output: ('Cristiano Ronaldo', 'Gareth Bale', 'Lionel Messi')

    تبدیل دو لیست به یک دیکشنری با استفاده از تابع Zip

    برای تبدیل دو لیست به یک دیکشنری مستقل با استفاده از تابع Zip در زبان Python دو راه حل وجود دارد که در مثال زیر می‌توانید هر دو راه حل را مشاهده کنید:

    player_numbers = [7, 9, 10]
    player_names = ['Cristiano Ronaldo', 'Gareth Bale', 'Lionel Messi']
    
    # Approach 1
    player_data = {number: name for number,
                   name in zip(player_numbers, player_names)}
    # --> {9: 'Gareth Bale', 10: 'Lionel Messi', 7: 'Cristiano Ronaldo'}
    
    # Approach 2
    player_data = dict(zip(player_numbers, player_names))
    # --> {9: 'Gareth Bale', 10: 'Lionel Messi', 7: 'Cristiano Ronaldo'}

    استفاده از تابع Zip در حلقه‌های For

    اگر می‌خواهید چندین لیست را در حلقه‌ی For مدیریت کنید، تابع Zip می‌تواند به شما کمک کند:

    player_numbers = [7, 9, 10]
    player_names = ['Cristiano Ronaldo', 'Gareth Bale', 'Lionel Messi']
    teams = ['Juventus', 'Real Madrid', 'FC Barcelona']
    
    player_data = zip(player_numbers, player_names, teams)
    
    for number, name, team in zip(player_numbers, player_names, teams):
        print(f"{name} represents {team} with a number of {number}")
    
    
    # OUTPUT:
    # Cristiano Ronaldo represents Juventus with a number of 7
    # Gareth Bale represents Real Madrid with a number of 9
    # Lionel Messi represents FC Barcelona with a number of 10

    منبع: https://betterprogramming.pub/7-useful-ways-to-use-the-zip-function-in-python-2b936414805e

    برچسب‌ها:

    ســــــــــــــــــــــال‌هاست که هستیم

    ۶ سال در کنار شما تجربه جمع کردیم. تازه در ابتدای مسیر هستیم، مسیر ساخت آینده.

    جمع‌مـــــــــــان، جمع است

    بیش از ۴۰ هزار توسعه‌دهنده و صاحبان کسب و کار در جمع ما هستند. جای شما خالی‌ست...

    خدمات رایگان لیارا

    ۲.۵ گیگابایت فضای ذخیره‌سازی ابری رایگان

    ۲.۵ گیگابایت Object Storage سازگار با پروتکل S3 با دیسک‌های SSD به‌صورت رایگان دریافت کنید.

    هاست رایگان برای دیتابیس‌

    دیتابیس‌های MariaDB، PostgreSQL و Redis را فقط با یک کلیک و به‌صورت رایگان تهیه کنید.

    سرویس DNS رایگان

    به سادگی دامنه‌تان را اضافه کنید و به صورت رایگان رکورد‌های آن را مدیریت کنید.

    ۱۰۰ هزار تومان اعتبار اولیه

    بعد از ثبت نام در لیارا مبلغ ۱۰۰ هزار تومان اعتبار هدیه دریافت می‌کنید که با توجه به ساعتی بودن هزینه سرویس‌ها، می‌توانید تمامی خدمات پولی را برای چندین هفته رایگان استفاده کنید.

    ارسال ۱۰۰ ایمیل تراکنشی رایگان در هر ماه

    در سرویس ایمیل لیارا شما می‌توانید تا ۱۰۰ ایمیل رایگان در هر ماه ارسال کنید. (به‌همراه دسترسی SMTP)

    هاست رایگان برای انواع وبسایت

    تفاوتی ندارد برای وبسایت خود از Node استفاده می‌کنید یا Laravel و Django، در لیارا می‌توانید به صورت کاملا رایگان آن را میزبانی کنید.

    همراه شما هستیم

    در خصوص سفارش یا استفاده از سرویس‌ها سوالی دارید؟
    تلفن واحد فروش:
    ۰۲۵-۳۳۵۵۷۶۱۹ (روزهای کاری ۹ الی ۱۷)
    تلفن واحد فروش: ۳۳۵۵۷۶۱۹-۰۲۵ (روزهای کاری ۹ الی ۱۷)