3 min. read

פרק קודם:

פייתון 9 - מילונים, טופלים וסטים

מה נלמד

  • סוגים שונים של מיזוגים
  • איך למזג רשימות, סטים, טופלים ומילונים

Merge - מיזוג

מיזוג מתייחס לשני רשימות שרוצים ליצור מהם רשימה אחת.
מבחינת טרמינולוגיה ניתן לקרוא לזה - Merge, Update או Join.

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

הוויזואליזציה הכי נפוצה לזה היא בעזרת Venn Diagram.
דיאגרמות שבנויה מעיגולים שמייצג מה משותף בין הרשימות.

מיזוג ריק - Empty Merge

שני העיגולים מייצגים את שני הרשימות שלנו.
במקרה של מיזוג ריק שום דבר לא קורה כי אנחנו לא לוקחים כלום.

מיזוג מלא - Full Merge

במיזוג מלא אנחנו לוקחים את הכל ללא תלות באם הערך מופיע פעמיים.

דוגמא:

מיזוג פנימי - Inner Merge

המיזוג הפנימי לוקח רק את כל מה שמשותף בין שני רשימות.

דוגמא:

מיזוג ימני/שמאלי - Right/Left Merge

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

דוגמא:

6 לא קיים בצד השמאלי ולכן הוא לא נכנס למיזוג.

מיזוג ימני/שמאלי חיצוני - Right/Left Outer Merge

המיזוג לוקח את הצדדים חוץ ממה שמשותף.

כאן 1 ו6 לא נכנסים למיזוג.

קוד פייתון

מיזוג רשימות

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

1
2
3
4
5
6
7
8
myList = [1,2,3]
myList2 = [4,5,6]

myList3 = myList + myList2
print(myList3)

myList.extend(myList2)
print(myList)

מיזוג טופלים

טופל לא יכול להשנות לכן אין לנו פונקציה extend.
אבל ניתן לחבר טופלים ואפילו להכפיל!

1
2
3
4
5
6
7
8
cars = ("Suzuki", "Toyota")
newCars = ("Mitsubishi","Volvo")
allCars = cars + newCars
print(allCars)

prices = (5, 6, 10, 13)
duplicatePrices = prices * 2
print(duplicatePrices)

מיזוג מילונים

מילונים ניתן גם לחבר בעזרת הפונקציה update.
בפייתון 3.9 ניתן גם להשתמש באופרטור |.

1
2
3
4
5
6
dic = { 1: "One", 2:"Two" }
dic2 = { 3: "Three", 4: "Four" }

dic.update(dic2)

print(dic)
1
2
3
4
5
6
dic = { 1: "One", 2:"Two" }
dic2 = { 3: "Three", 4: "Four" }

dic3 = dic | dic2

print(dic3)

מיזוג סטים

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

זוכרים שדיברנו על const ו Immutable?

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

תנסו לבדוק מה יודפס אחרי כל מיזוג לפני שאתם מריצים את הקוד!

מיזוג מלא

update - מעדכן סט קיים
union - מחזיר סט חדש.

1
2
3
4
5
myList = {1,2,3}
myList2 = {4,5,6}

myList3 = myList.union(myList2)
print(myList3)

מיזוג פנימי

intersection_update - מעדכן סט קיים
intersection - מחזיר סט חדש

1
2
3
4
5
myList = {1,2,3}
myList2 = {1,4,5,6}

myList3 = myList.intersection(myList2)
print(myList3)

מיזוג חיצוני

symmetric_difference_update
symmetric_difference

1
2
3
4
5
myList = {1, 2, 3}
myList2 = {1, 4, 5, 6}

myList3 = myList.symmetric_difference(myList2)
print(myList3)

תרגילים

  1. א.
    מה ההבדל בין update ו union?
    ב.
    מה ההבדל בין Left Merge ל-Left Outter Merge?
    ג.
    תנו כמה דוגמאות ללמה נרצה למזג רשימות.
    בין הדוגמאות תנסו לחשוב על מקרים טכניים שבהם מערכת או קוד יירצו לבצע מיזוג רשימות.
    מה הכוונה למקרה טכני?
    כאשר הצורך לא בא מצורך של בן אדם לרשימות האלו, אלה הקוד/המחשב יירצה לבצע את זה עבור עיבוד נתונים פנימי.

  2. תממשו מיזוג חיצוני למילון ע”פ המפתחות שלו.
    ע”פ העקרון שלמדנו - תחזירו מילון חדש.

  3. אחרי שסקרנו שני חנויות הוצאנו רשימות מוצרים של שניהם:

    1
    2
    firstStoreProducts = { "Flowers", "Toilet paper" , "Apples", "Oranges" , "Tomatoes"}
    secondStoreProducts = { "Flowers", "Toilet paper", "PC Screen", "Robotic Arm","Car Engine"}

אנחנו רוצים למצוא:
- מה הם מוכרים זהה.
- מה שונה בין המוצרים.

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





בפרק הבא נרחיב את הידע על אובייקטי רשימות נוספות!

פייתון 10.2 - אובייקטי רשימות ויכולות

אהבתם? מוזמנים להביע תמיכה כאן: כוס קפה