פרק קודם:
פייתון 10 - מיזוג רשימותלפייתון יש כמה יכולות נוספות מתחת לשרוול שייעזרו בביצוע משימות פשוטות.
אם אתם לא וזכרים מה זה טאפל:
פייתון 9 - מילונים, טופלים וסטיםNamed tuple
מוסיף שמות לערכי הטאפל כך שאנחנו יכולים לגשת בעזרת שם לערך מסוים.
1 | from collections import namedtuple |
פרמטרים לפונקציה namedtuple
:
1 | collections.namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)¶ |
typename
- שם הטאפל, בעזרתו ניצור טאפלים חדשים
field_named
- רשימה של הפרמטרים.
ניתן להעביר רשימה, או מחרוזת עם שמות, השמות יכולים להיות מופרדים ברווח או פסיקים:
1 | Person = namedtuple('Person', ['Name','Age']) |
rename
- מוודא שהשמות של המשתנים נכונים לפי שפת פייתון.
למשל אסור להתחיל משתנה עם מספר,
או אסור ששם משתנה יהיה מילה שמורה בפייתון.
במידה ושם המשתנה לא תקין הפונקציה תחליף אותו לקו תחתון ומספר.
1 | Person = namedtuple('Person',['Age','def'], rename=True) |
defaults
- רשימה של ערכים בברירת מחדל כאשר יוצרים טאפל ריק. module
- מחליף את הפרמטר __module__
במידה ומועבר הפרמטר.ניתן לגשת למשתנים בעזרת אינדקסים כי טאפל הוא מאודנקס!
1 | p = Person(Name='Bob', Age = 42) |
ניתן לפצל טאפל למשתנים:
1 | p = Person(Name='Bob', Age = 42) |
פיצול טאפלים הוא קונספט נפוץ בתכנות וקיים גם בשפות אחרות - קונספט זה נקרא Deconstruction
.
לא להתבלבל עם ה-Dtor
או ה-Destructor
האחראי על מחיקה של מידע.
בפייתון זה לא נפוץ ולכן אין צורך להשתמש בזה כל כך.
ניתן לגשת למשתנים על פי שם:
1 | p = Person(Name='Bob', Age = 42) |
1 | from collections import ______ |
1 | from collections import namedtuple |
בתרגיל הזה ניתן לראות שימוש מעולה לnamedtuple
.
אנחנו ממירים מידע לא מיוצג - רשימה של מספרים,
למידע מפורש - נקודות.
במקום לגשת לאינדקסים:
1 | x = data[0] |
ניתן להשתמש בגישה מפורשת:
1 | points[0].X |
Counter
הוא אובייקט פשוט - ניתן לייחס אותו לרשימה של מילים עם מספרים.
כל מטרתו הוא לעזור לספור כמות של כל דבר שאנו רוצים.
מאחורי הקלעים Counter
הוא מילון.
1 | from collections import Counter |
היכולת העוצמתית של האובייקט הזה הוא בעצם לקבל מחרוזות או רשימות שונות כפרמטר,
למשל, כדי לספור את כל התווים במחרזות:
1 | countChars = Counter('abcbfbccfaabcafbcabcfabcabc').most_common(3) |
most_common(n)
- יחזיר את המופעים הנפוצים ביותר. elements
- יחזיר את כל המופעים כאלמנטים בודדים.a
הוא יוצג כ8 מופעים שונים של התו:1 | everything = Counter('abcbfbccfaabcafbcabcfabcabc').elements() |
total
- מחזיר את כמות כל האלמנטים. 1 | from collections import Counter |
חיבור וחיסור:
1 | productsA + productsB |
מיזוג:
1 | productsA & productsB |
איחוד:
1 | productsA | productsB |
השוואה:
1 | productsA == productsB |
בדיקת הכלה:
1 | productsA <= productsB |
1 | milk |
1 | from collections import Counter |
שרשרת מפות או ה-ChainMap
הוא מילון אשר מקבץ בתוכו מילונים.
הוא יותר מהיר לפעולות קלות כדי למזג כמה מילונים יחדיו,
במקום לעדכן מילון אחד בערכים חדשים.
כמובן זה תלוי בסוג המיזוג שאנחנו מעוניינים לעשות כפי שלמדנו בפרק 10:
פייתון 10.2 - אובייקטי רשימות ויכולות1 | dictOne = {'a':2, 'b': 3,'d':6 } |
לחילופין, נוכל להשתמש ב-ChainMap
:
1 | from collections import ChainMap |
בעזרת המשתנה maps
נוכל לגשת לרשימה של המילונים.
1 | print(chain.maps) |
deque
הוא קיצור ל- Double Ended Queue
.
קוראים את המילה כ-דק
או deck
.
הרשימה הזו היא בעצם תור דו כיווני - ניתן להכניס איברים מסוף התור או תחילת התור.
ובכך לממש שני קונספטים:
ההתחלה של התור מצד שמאל, וסוף התור הוא מצד ימין.
תור כמו שהוא במציאות הוא רשימה שהראשון שנכנס הוא הראשון שיוצא!
אם יש לנו יותר מאלנט אחד הם נאגרים וכאשר אנחנו מוציאים אלמנט - הראשון יוצא.
תורים בתכנות קיימים בכל מקום כי זה הגיוני שכאשר בקשה מתקבלת אנחנו נטפל בה,
ואז כשעוד אחת מתקבלת היא נאגרת בתור ותהיה הבאה בתור!
מחסנית עובדת בשיטה הפוכה - האלמנט האחרון שנכנס הוא הראשון שיוצא.
דוגמא טובה לזה תהיה מחסנית קריאות קוד!
נתקלנו בזה בפרק 8 - כשלמדנו על רקורסיות:
deque([maxlen])
- יוצר דק עם כמות מקסימלית, אם לא כותבים כמות מקסימלית אז הדק יכול לגדול לעד. append
- משתמש ברשימה בצורה רגילה, מוסיף אלמנט מצד ימין. appendleft
- מוסיף אלמנט לצד השמאלי של הרשימה. pop
- מוריד אלמנט מהצד הימני של הדק. popleft
- מוריד אלמנט מהצד השמאלי של הדק.deque
כדי ליצור תור.pop
התוכנה תדפיס את כל המספרים.1 | from collections import deque |
extend
- מוסיף אלמנטים לצד ימיןextendleft
- מוסיף אלמנטים לצד שמאל1 | myList = [1,2,3] |
רשומות deque
הן מאונדקסות:
index
- מחפש את האינדקס של האלמנטinsert
- מכניס אלמנט לאינדקס ספציפי1 | deck = deque() |
כמו כן ניתן גם לסובב את האלמנטים בפנים:
reverse
- מחזיר את הדק בסדר הפוך. rotate
- מסובב את הדק ימינה או שמאלה.SIMP*L*Y**C*O***D*E
על כל אות יש להוסיף את האות למחסנית,
ועל כל כוכבית להוריד אות מהמחסנית.
הדפיסו את המחסנית כל שלב.
1 | from collections import deque |
אלו כמה סוגי רשימות שייעזרו לא לכתוב את הגלגל מחדש.
בפרק הבא נלמד כיצד לעבוד עם קבצים!
פייתון 11 - קידוד וקבצים