כיצד להשתמש בפונקציית Zip ב- Python

How Use Zip Function Python



מאמר זה יכסה מדריך לגבי פונקציית zip הזמינה בספריית המודולים הסטנדרטיים של פייתון. שיטה זו מאפשרת לך לשלב ולצמד אלמנטים של אובייקטים חוזרים רבים. לאחר מכן תוכל להפעיל היגיון נוסף על זוגות אלה. במקרים רבים, השימוש בפונקציית zip הוא הרבה יותר יעיל ונקי יותר משימוש במספר לולאות מקוננות.

אודות פונקציית Zip

כפי שצוין קודם לכן, פונקציית ה- zip משמשת ליצירת זוגות מרכיבים של אובייקטים רבים הניתנים לעריכה. שקול את הדוגמה שלהלן כדי להבין את התחביר הבסיסי והשימוש בפונקציית zip:







רשימה 1= ['ל', 'ב', 'ג']
רשימה 2= ['תפוח עץ', 'כַּדוּר', 'חתול']
רוכסן= רוכסן(רשימה 1,רשימה 2)
הדפס (רשימה(רוכסן))

שני המשפטים הראשונים בדוגמת הקוד לעיל מגדירים שתי רשימות המכילות כמה אלמנטים. לאחר מכן, פונקציית zip משמשת על ידי העברת משתני list1 ו- list2 כארגומנטים. זהו התחביר העיקרי של פונקציית ה- zip. אתה רק צריך להעביר רשימות או iterables מסודרים תקפים אחרים כארגומנטים שאת האלמנטים שלהם אתה רוצה לשלב. לבסוף, משפט ההדפסה משמש להשגת הפלט של המשתנה הרוכסן. לאחר הפעלת מדגם הקוד שהוזכר לעיל, אתה אמור לקבל את הפלט הבא:



[('א', 'תפוח'), ('ב', 'כדור'), ('ג', 'חתול')]

שים לב שפונקציית ה- zip מחזירה אובייקט מסוג zip ולא רשימה. עליך להמיר אותו לסוג חוזר, כפי שמוצג בהצהרת ההדפסה למעלה.



במילים פשוטות, פונקציית zip אוספת אלמנטים של אותו אינדקס משתי רשימות ומשלבת אותם כזוג בצמד. כך שהרכיב ה -0 מרשימה 1 משולב עם האלמנט ה -0 של רשימה 2, האלמנט הראשון מרשימה 1 משולב עם האלמנט הראשון ברשימה 2 וכן הלאה. פונקציית Zip נעה משמאל לימין ולחבר המכיל אלמנטים משויכים יש אותו אינדקס כמו האלמנטים המאוחסנים בהם.





שימוש ב- Zip כאשר ל- Iterables אין אותו מספר אלמנטים

בדוגמה שהוזכרה למעלה, לשתי הרשימות יש מספר אלמנטים שווה. במקרה שאתה מתמודד עם קוד כלשהו שבו לשתי הרשימות אין אותו מספר אלמנטים, פונקציית ה- zip תפסיק ברכיב האחרון ברשימה בעל המספר הנמוך ביותר של אלמנטים.

בדוגמה למטה, פונקציית ה- zip תעצור ברכיב c, ללא קשר לרשימה 2 שיש עוד אלמנט אחד.



רשימה 1= ['ל', 'ב', 'ג']
רשימה 2= ['תפוח עץ', 'כַּדוּר', 'חתול', 'בּוּבָּה']
רוכסן= רוכסן(רשימה 1,רשימה 2)
הדפס (רשימה(רוכסן))

לאחר הפעלת מדגם הקוד שהוזכר לעיל, אתה אמור לקבל את הפלט הבא:

[('א', 'תפוח'), ('ב', 'כדור'), ('ג', 'חתול')]

אתה יכול להשתמש ביותר משני Iterables בעת שימוש בפונקציית Zip

בדרך כלל, פונקציית zip משמשת להשוואת שני אובייקטים הניתנים לעריכה. עם זאת, תוכל להעביר כל מספר משתנים כארגומנטים לפונקציית ה- zip. העיקרון של עצירה באלמנט האחרון של הרשימה הקצרה ביותר יהיה עדיין ישים.

רשימה 1= ['ל', 'ב', 'ג']
רשימה 2= ['תפוח עץ', 'כַּדוּר', 'חתול', 'בּוּבָּה']
רשימה 3= ['5', '3']
רוכסן= רוכסן(רשימה 1,רשימה 2,רשימה 3)
הדפס (רשימה(רוכסן))

לאחר הפעלת מדגם הקוד שהוזכר לעיל, אתה אמור לקבל את הפלט הבא כתוצאה מכך:

[('א', 'תפוח', '5'), ('ב', 'כדור', '3')]

יצירת רשימות בודדות מאובייקט מסוג Zip

אם כבר יש לך אובייקט zip, תוכל להשתמש בו כדי לאכלס מחדש רשימות בודדות שהיו בשימוש קודם לכן כאשר נקראה להן לראשונה פונקציית ה- zip.

רשימה 1= ['ל', 'ב', 'ג']
רשימה 2= ['תפוח עץ', 'כַּדוּר', 'חתול', 'בּוּבָּה']
רשימה 3= ['5', '3']
רוכסן= רוכסן(רשימה 1,רשימה 2,רשימה 3)
l1,l2,l3= רוכסן(*רוכסן)
הדפס (רשימה(l1), רשימה(l2), רשימה(l3))

לאחר הפעלת מדגם הקוד שהוזכר לעיל, אתה אמור לקבל את הפלט הבא כתוצאה מכך:

['א', 'ב'] ['תפוח', 'כדור'] ['5', '3']

בדוגמת הקוד שלמעלה, אובייקט ה- zip מופחת באמצעות אופרטור *. תוצאות מנופחות מוזנות לאחר מכן לפונקציית שיחה נוספת ל- zip היוצרת רשימות מקוריות. שים לב שלא ייתכן שתחזיר את כל האלמנטים לרשימות המקוריות אם נעשה שימוש ברשימות באורך לא שווה כאשר אובייקט ה- zip נוצר בפעם הראשונה.

שימוש ב- Zip כשאתה רוצה לשמור על האלמנטים מהארוכים ביותר

במספר דוגמאות לעיל, ייתכן שראית כי פונקציית ה- zip כברירת מחדל נעצרת באלמנט האחרון של העריכה הקצרה ביותר. מה אם אתה רוצה שהוא ימשיך להתאושש עד שהוא יגיע ליסוד האחרון של העריכה הארוכה ביותר?

במקרה כזה, יהיה עליך להשתמש בשיטת zip_longest () ממודול itertools של Python. הוא פועל בדיוק כמו פונקציית ה- zip, עם הבדל אחד קטן שהוא עוצר באלמנט האחרון מהסוג הארוך ביותר החוזר על עצמו.

מ itertools יְבוּאzip_longest
רשימה 1= ['ל', 'ב', 'ג']
רשימה 2= ['תפוח עץ', 'כַּדוּר', 'חתול', 'בּוּבָּה']
רשימה 3= ['5', '3']
רוכסן=zip_longest(רשימה 1,רשימה 2,רשימה 3)
הדפס (רשימה(רוכסן))

לאחר הפעלת מדגם הקוד שהוזכר לעיל, אתה אמור לקבל את הפלט הבא כתוצאה מכך:

[('א', 'תפוח', '5'), ('ב', 'כדור', '3'), ('ג', 'חתול', אין), (אין, 'בובה', אין) ]

ערכים חסרים מאוכלסים כאובייקטים מסוג None. תוכל גם לספק ערך משלך למילוי על ידי העברת ארגומנט מילוי ערך נוסף לשיטה zip_longest.

מ itertools יְבוּאzip_longest
רשימה 1= ['ל', 'ב', 'ג']
רשימה 2= ['תפוח עץ', 'כַּדוּר', 'חתול', 'בּוּבָּה']
רשימה 3= ['5', '3']
רוכסן=zip_longest(רשימה 1,רשימה 2,רשימה 3,ערך ערך='ערך_הערך שלי')
הדפס (רשימה(רוכסן))

לאחר הפעלת מדגם הקוד שהוזכר לעיל, אתה אמור לקבל את הפלט הבא כתוצאה מכך:

[('א', 'תפוח', '5'), ('ב', 'כדור', '3'), ('ג', 'חתול', 'הערך שלי'), ('ערך שלי', 'בובה' ',' ערך_הערך שלי]]]

סיכום

ניתן לחקות את פונקציית ה- Zip באמצעות כמה הצעות לולאות ותנאים. עם זאת, הוא מסייע בשמירה על קוד מסודר ונקי על ידי הסרת מילוליות מיותרות ואמירות שחוזרות על עצמן.