דילוג לתוכן המרכזי
מודול 3 · שיעור 4 מתוך 412/36 בקורס~10 min
שיעורי מודול (4/4)

סטים

סט הוא אוסף של אלמנטים ייחודיים, לא מסודרים. שלוש כוחות על:

  1. ביטול כפילויות אוטומטי: להוספת אותו אלמנט פעמיים אין השפעה.
  2. מבחן החברות ב-O(1): x in s מהיר במיוחד אפילו עם מיליונים של אלמנטים (זה מבוסס hash, כמו dicts).
  3. פעולות סט: איחוד, צומת, הבדל, הבדל סימטרי.

יצירת סט

Python
vuoto = set()           # ATTENZIONE: {} è un dict vuoto, non un set!
numeri = {1, 2, 3}
da_lista = set([1, 1, 2, 3, 3, 3])   # {1, 2, 3}

סוגרים לבד {} יוצרים מילון ריק, לא קבוצה: עבור קבוצה ריקה אתה צריך set().

שינוי סט

Python
s = {1, 2, 3}
s.add(4)         # {1, 2, 3, 4}
s.add(1)         # nessun effetto (già presente)
s.discard(99)    # rimuove se presente, silenzioso altrimenti
s.remove(2)      # rimuove o solleva KeyError

הגדר פעולות

Python
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

a | b    # {1, 2, 3, 4, 5, 6}     unione
a & b    # {3, 4}                  intersezione
a - b    # {1, 2}                  differenza (in a ma non in b)
a ^ b    # {1, 2, 5, 6}            differenza simmetrica (xor)

ישנם גם טפסי שיטה (a.union(b), a.intersection(b), ...) אשר ב בנוסף קבל כל איטרציה, לא רק סטים.

מבחן חברות

Python
parole = {"ciao", "mondo", "python"}
"ciao" in parole       # True   O(1)
"java" not in parole   # True

לשם השוואה: חיפוש עם in בתוך list הוא O(n) ובארוך רשימות זה הרבה יותר איטי.

סט קפוא: הגרסה הבלתי ניתנת לשינוי

frozenset({1, 2, 3}) היא הגרסה הניתנת לגיבוש: היא יכולה להיות מקש dict או אלמנט של סט אחר.

הגדר פעולות וביצועים

סטים מיושמים כטבלאות גיבוב, מה שהופך את בדיקת החברות (x in my_set) למהירה ביותר: היא פועלת בזמן קבוע O(1), בניגוד לרשימות שבהן החיפוש לוקח זמן ליניארי O(n). בנוסף, הם תומכים בפעולות אלגבריות כמו איחוד (|), צומת (&) והפרש (-).

נסה את זה

פעילות גופנית#python.m3.l4.e1
ניסיונות: 0טוען...

בהינתן הרשימה `nums = [1, 2, 2, 3, 3, 3, 4]`, בנה `unique_items` עם הערכים הייחודיים (בכל סדר) ולאחר מכן חשב את `count' בתור len(unique_items). הערך 'ספירה'.

טוען עורך...
הצג רמז

set(nums) מסיר כפילויות.

הפתרון זמין לאחר 3 ניסיונות

סקירת התרגיל

פעילות גופנית#python.m3.l4.e2
ניסיונות: 0טוען...

בהינתן `a = {1, 2, 3, 4}` ו-`b = {3, 4, 5, 6}`, חשב את הצומת ל`פריטים_נפוצים` ואת ההפרש a-b ל`רק_a`. הערך את הטפול `(פריטים נפוצים, רק_א)`.

טוען עורך...
הצג רמז

& צומת, - הבדל.

הפתרון זמין לאחר 3 ניסיונות

אתגר נוסף

פעילות גופנית#python.m3.l4.e3
ניסיונות: 0טוען...

Given two sets `set_a = {1, 2, 3}` and `set_b = {2, 3, 4}`, calculate the mathematical intersection of the two sets (their common elements). Store the resulting set in `common_elements` and evaluate it.

טוען עורך...
הצג רמז

אתה יכול להשתמש באופרטור & או בשיטת set_a.intersection(set_b).

הפתרון זמין לאחר 3 ניסיונות