الانتقال إلى المحتوى الرئيسي
الوحدة 3 · الدرس 4 من 412/36 في الدورة~10 min
دروس الوحدة (4/4)

مجموعات

المجموعة عبارة عن مجموعة من العناصر الفريدة وغير المرتبة. ثلاث قوى خارقة:

  1. إلغاء البيانات المكررة تلقائيًا: إضافة نفس العنصر مرتين ليس له أي تأثير.
  2. O(1) اختبار العضوية: x in s سريع للغاية حتى مع الملايين من العناصر (إنها تعتمد على التجزئة، مثل الإملاء).
  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}) هو الإصدار القابل للتجزئة: يمكن أن يكون مفتاح إملاء أو عنصر من مجموعة أخرى

ضبط العمليات والأداء

يتم تنفيذ المجموعات كجداول تجزئة، مما يجعل اختبار العضوية (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_فقط`. قم بتقييم الصف `(common_items, Only_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 من المحاولات