collections — טיפוסי אוספים ומכלים¶
מודול זה מספק טיפוסי מכל מתמחים המשלימים את הטיפוסים המובנים list, tuple, dict ו-set: תור דו-קצותי (deque), מפעל ליצירת tuple עם שדות בעלי שם (namedtuple()), ומילון המשמר סדר (OrderedDict).
מחלקות¶
- class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)¶
Deques (תורים דו-קצותיים) הם מכל הדומה לרשימה התומך בהוספות ובשליפות ב-O(1) משני צידי ה-deque. deques חדשים נוצרים באמצעות הארגומנטים הבאים:
iterable הוא אובייקט בר-איטרציה המשמש לאכלוס ה-deque בעת יצירתו. הוא יכול להיות tuple או רשימה ריקים כדי ליצור deque שריק בתחילה.
maxlen חייב להיות מצוין וה-deque יוגבל לאורך מרבי זה. כאשר ה-deque מלא, כל פריט חדש שיתווסף ידחה פריטים מהקצה הנגדי.
ה-flags האופציונלי יכול להיות 1 כדי לבדוק גלישה בעת הוספת פריטים.
אובייקטי deque תומכים ב-
bool,len(), באיטרציה ובטעינה ואחסון באמצעות מנוי. כמו כן יש להם את המתודות הבאות:- append(x: Any) None¶
מוסיפה את x לצד ימין של ה-deque. מעלה
IndexErrorאם בדיקת הגלישה מופעלת ואין עוד מקום בתור.
- appendleft(x: Any) None¶
מוסיפה את x לצד שמאל של ה-deque. מעלה
IndexErrorאם בדיקת הגלישה מופעלת ואין עוד מקום בתור.
- pop() Any¶
מסירה ומחזירה פריט מצד ימין של ה-deque. מעלה
IndexErrorאם אין פריטים.
- popleft() Any¶
מסירה ומחזירה פריט מצד שמאל של ה-deque. מעלה
IndexErrorאם אין פריטים.
- extend(iterable: Iterable) None¶
מרחיבה את ה-deque על ידי הוספת כל הפריטים מ-iterable לצד ימין של ה-deque. מעלה
IndexErrorאם בדיקת הגלישה מופעלת ואין עוד מקום ב-deque.
- collections.namedtuple(name: str, fields: str | Sequence[str]) type¶
זוהי פונקציית מפעל ליצירת טיפוס namedtuple חדש בעל שם מסוים וקבוצת שדות. namedtuple הוא תת-מחלקה של tuple המאפשרת גישה לשדותיו לא רק באמצעות אינדקס מספרי, אלא גם בתחביר גישה לתכונה תוך שימוש בשמות שדות סמליים. Fields הוא רצף של מחרוזות המציין שמות שדות. לשם תאימות עם CPython הוא יכול להיות גם מחרוזת עם שמות שדות מופרדים ברווחים (אך זה פחות יעיל). דוגמה לשימוש:
from collections import namedtuple MyTuple = namedtuple("MyTuple", ("id", "name")) t1 = MyTuple(1, "foo") t2 = MyTuple(2, "bar") print(t1.name) assert t2.name == t2[1]
מופעים מספקים גם את המתודה הבאה:
- collections._asdict() OrderedDict
מחזירה את שמות השדות וערכיהם כ-
OrderedDict.
- class collections.OrderedDict(*args: Any, **kwargs: Any)¶
תת-מחלקה של הטיפוס
dictהזוכרת ומשמרת את סדר המפתחות שנוספו. מקבלת את אותן צורות בנאי כמוdict(אובייקט בר-איטרציה של זוגות(key, value), מיפוי אחר, או ארגומנטים בשם). כאשר עוברים על ordered dict באיטרציה, המפתחות/הפריטים מוחזרים בסדר שבו נוספו:from collections import OrderedDict # To make benefit of ordered keys, OrderedDict should be initialized # from sequence of (key, value) pairs. d = OrderedDict([("z", 1), ("a", 2)]) # More items can be added as usual d["w"] = 5 d["b"] = 3 for k, v in d.items(): print(k, v)
פלט:
z 1 a 2 w 5 b 3
- popitem() Tuple¶
מסירה ומחזירה זוג (key, value) מן המילון. הזוגות מוחזרים בסדר LIFO.
הבדל מ-CPython
OrderedDict.popitem()אינו תומך בארגומנטlast=Falseותמיד יסיר ויחזיר את הפריט האחרון, אם קיים.פתרון עוקף לכך הוא להשתמש ב-
pop(<first_key>)כדי להסיר את הפריט הראשון:first_key = next(iter(d)) d.pop(first_key)