PracticU

sorting

בלי כתוביותעם כתוביות
PracticU › קורס פייתון - Python › sorting
מילון מושגים:
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.
Python - שפת תכנות עילית וקריאה, נפוצה בפיתוח, אוטומציה, ניתוח נתונים ולמידת מכונה.
מערך - מבנה נתונים שמאחסן אוסף ערכים מאותו סוג ברצף, שאפשר לגשת אליהם לפי מספר מיקום (אינדקס).
Lambda - פונקציה קצרה ואנונימית בקוד. גם שירות של AWS להרצת קוד בענן בלי לנהל שרתים.
זיכרון - רכיב מהיר ונדיף שבו המחשב שומר נתונים ותוכניות בזמן ריצתם. תוכנו נמחק עם כיבוי המחשב.

sorting
בשיעור נלמד איך ממיינים רשימות בפייתון: ההבדל בין מיון במקום לבין יצירת רשימה ממוינת חדשה, ואיך מגדירים לפי מה למיין, בעזרת key או comparator.
השלבים העיקריים
1. מיון במקום: הפונקציה list.sort() מסדרת את הרשימה עצמה, ומחזירה None. לכן a = lst.sort() נותן None ולא רשימה.
2. sorted: הפונקציה sorted() מחזירה רשימה חדשה ממוינת, והרשימה המקורית נשארת כמו שהייתה.
3. פרמטרים: שתי הפונקציות מקבלות reverse, שמסדר בסדר הפוך, ו-key. ב-Python 2 היה גם פרמטר cmp.
4. comparator: פונקציה שמקבלת שני ערכים ומחזירה מי גדול מי, מתאימה למיון של מבנים מורכבים, אבל היא מבצעת הרבה השוואות.
5. key: פונקציה שמקבלת ערך אחד ומחזירה את הערך שלפיו ממיינים. לדוגמה, למיין אנשים לפי השם, לפי הגיל או לפי השם באותיות קטנות.
6. מיון לפי שם באותיות קטנות: כדי שאותיות גדולות וקטנות ייחשבו שוות, משתמשים ב-lower() בתוך ה-key.
איך זה עובד
ה-key נקרא פעם אחת לכל איבר, ולכן הוא יעיל יותר מ-comparator, שצריך לקרוא לו בכל השוואה. בהרצאה נמדד שבמערך של עשרה איברים ה-key מבצע כמעט פי שניים פחות קריאות. ככל שהרשימה גדולה, ההפרש גדל.
פקודות והגדרות
- lst.sort(reverse=True)
- sorted(persons, key=lambda p: p.name)
- sorted(persons, key=lambda p: p.name.lower())
טעויות נפוצות
- כותבים for x in lst.sort() ומקבלים שגיאה, כי sort מחזיר None.
- אם לא מגדירים key, מיון של מבנים לפי מיקום בזיכרון לא נותן את התוצאה שרוצים.
- מיון לפי שם בלי lower() מציב אותיות גדולות לפני קטנות.
שימו לב
בפייתון מעדיפים key על פני comparator, ו-sorted כשצריך להשאיר את הרשימה המקורית במקומה.
השיעור הבא בקורס: קבצים - files

פרקי ההרצאה: sorting

  1. 00:00

    מיון רשימה בפייתון: מבוא

  2. 00:47

    ערבוב רשימה והכנה למיון

  3. 01:29

    sort מבצע מיון במקום ומחזיר None

  4. 02:06

    sorted מחזיר רשימה ממוינת חדשה

  5. 03:13

    פרמטרים: cmp, key ו-reverse

  6. 04:20

    Comparator - פונקציית השוואה מותאמת

  7. 05:16

    מיון אובייקטים של מחלקת Person

תמלול ההרצאה: sorting

הטקסט המלא של הדקות הראשונות בהרצאה «sorting» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:03

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

  2. 00:33

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

  3. 00:53

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

  4. 01:19

    אז בואו נתחיל בפונקציה שהיא בתוך הליסט, יש לנו print lst.sort ועל הפרמטרים האלה נדבר עוד רגע. שימו לב שקיבלנו none, למה קיבלנו none?

  5. 01:36

    כמו שאמרתי הפונקציה הזאת היא עושה את המיון in place וזה אחד הדברים שאנשים נופלים בו, שימו לב עכשיו, עכשיו המספרים ממויינים, זאת אומרת הדבר הזה אם אני עושה a שווה ל-list.sort ואחרי זה אני עושה איזושהי לולאה לדבר הזה אז אני אעוף כי זה בעצם שווה ל-none, חשוב מאוד לשים לב לדבר הזה.

  6. 02:00

    אם בכל זאת נרצה לכתוב for משהו in sort, בשביל זה יש לנו את הפונקציה sorted. הפונקציה הזאת מחזירה את הערך ממוין. למה אני מתכוון? print sorted של lst.

  7. 02:34

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

  8. 02:45

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

  9. 02:57

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

  10. 03:06

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

  11. 03:38

    אומרת אם reverse שווה false המספר 0 יהיה ראשון והמספר 9 יהיה אחרון האות a תהיה ראשונה והאות z תהיה אחרונה במקרה של דמיון של אותיות לעומת זאת אם reverse יהיה true נראה את הדברים הפוכים בואו נראה דוגמה שימו

  12. 04:18

    אני חושב שעכשיו קיבלנו את המספרים מ-9 עד 0. כלומר, זה הסדר של המיון, עולה או יורד. מה בנוגע ל-CMP ול-Key? אז CMP זה משהו שאנחנו, מי שמכיר Java ושפות תכנות נוספות, הדבר הזה נקרא קומפרטור.

  13. 04:37

    מה זאת אומרת? זאת פונקציה שאנחנו מעבירים לפונקציה Sort, שהיא מקבלת, החתימה שלה צריכה להיות ככה, שלה נגיד CMP, זה לא באמת משנה, היא מקבלת שני מספרים, והיא צריכה להחזיר מי מהם גדול יותר.

  14. 04:57

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

  15. 05:11

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

לקורס המלא: קורס פייתון אונליין למתחילים

ההרצאה הקודמת: map & filter

ההרצאה הבאה: קבצים - files

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס PHP - פרויקט מעשי