مرحباً بكم في هذا الدرس الشامل حول المجموعات (Sets) في بايثون. سنتعلم اليوم كيفية التعامل مع البيانات الفريدة بفعالية وإجراء العمليات الرياضية مثل الاتحاد والتقاطع.
1. إنشاء المجموعات وإضافة العناصر
المجموعة في بايثون هي مجموعة غير مرتبة من العناصر الفريدة غير القابلة للتغيير (immutable). يمكننا إنشاؤها باستخدام الأقواس المعقوفة {} أو الدالة set().
ملاحظة تقنية: لا يمكن للمجموعات أن تحتوي على عناصر مكررة، وإذا حاولت إضافة عنصر موجود بالفعل، فلن يتغير حجم المجموعة.
# إنشاء مجموعة فارغة
my_set = set()
print(f"المجموعة الفارغة: {my_set}")
# إنشاء مجموعة بعناصر أولية
fruits = {"تفاح", "برتقال", "موز"}
print(f"مجموعة الفواكه الأولية: {fruits}")
# إضافة عناصر إلى المجموعة
fruits.add("فراولة")
fruits.add("تفاح") # محاولة إضافة عنصر موجود لن تغير المجموعة
print(f"مجموعة الفواكه بعد الإضافة: {fruits}")
# إزالة عنصر من المجموعة
fruits.remove("برتقال")
print(f"مجموعة الفواكه بعد الإزالة: {fruits}")
2. العمليات الرياضية على المجموعات (الاتحاد، التقاطع، الفرق)
تتيح لنا المجموعات إجراء عمليات رياضية قوية مثل الاتحاد (Union)، التقاطع (Intersection)، والفرق (Difference)، والتي تعتبر أساسية في تحليل البيانات ومعالجتها.
ملاحظة تقنية: هذه العمليات مفيدة جداً في سيناريوهات مثل مقارنة قوائم المستخدمين أو تصفية البيانات الفريدة بين مجموعتين.
set_a = {1, 2, 3, 4, 5}
set_b = {4, 5, 6, 7, 8}
# الاتحاد (Union): جميع العناصر الفريدة من كلا المجموعتين
union_set = set_a.union(set_b)
# أو باستخدام المعامل |
union_set_operator = set_a | set_b
print(f"الاتحاد (union): {union_set}")
# التقاطع (Intersection): العناصر المشتركة بين المجموعتين
intersection_set = set_a.intersection(set_b)
# أو باستخدام المعامل &
intersection_set_operator = set_a & set_b
print(f"التقاطع (intersection): {intersection_set}")
# الفرق (Difference): العناصر الموجودة في set_a وليست في set_b
difference_set_ab = set_a.difference(set_b)
# أو باستخدام المعامل -
difference_set_ab_operator = set_a - set_b
print(f"الفرق (set_a - set_b): {difference_set_ab}")
# الفرق المتماثل (Symmetric Difference): العناصر الموجودة في إحدى المجموعتين ولكن ليست في كليهما
symmetric_difference_set = set_a.symmetric_difference(set_b)
# أو باستخدام المعامل ^
symmetric_difference_set_operator = set_a ^ set_b
print(f"الفرق المتماثل: {symmetric_difference_set}")
3. التحقق من وجود العناصر والمجموعات الفرعية
يمكننا بسهولة التحقق مما إذا كان عنصر معين موجودًا في المجموعة، أو ما إذا كانت مجموعة ما هي مجموعة فرعية (subset) أو مجموعة عليا (superset) لمجموعة أخرى.
ملاحظة تقنية: هذه الفحوصات ضرورية للتحقق من الشروط والمنطق في تطبيقاتك، مثل التحقق من الأذونات أو حالة البيانات.
my_numbers = {10, 20, 30, 40, 50}
subset_numbers = {10, 20}
other_numbers = {10, 60}
# التحقق من وجود عنصر (in operator)
is_30_in = 30 in my_numbers
is_90_in = 90 in my_numbers
print(f"هل 30 موجود في my_numbers؟ {is_30_in}")
print(f"هل 90 موجود في my_numbers؟ {is_90_in}")
# التحقق مما إذا كانت مجموعة فرعية (issubset)
is_subset = subset_numbers.issubset(my_numbers)
is_other_subset = other_numbers.issubset(my_numbers)
print(f"هل subset_numbers مجموعة فرعية من my_numbers؟ {is_subset}")
print(f"هل other_numbers مجموعة فرعية من my_numbers؟ {is_other_subset}")
# التحقق مما إذا كانت مجموعة عليا (issuperset)
is_superset = my_numbers.issuperset(subset_numbers)
print(f"هل my_numbers مجموعة عليا من subset_numbers؟ {is_superset}")
الكود النهائي الكامل
هذا هو الكود المجمع لجميع الأمثلة التي تناولناها في الدرس.
# 1. إنشاء المجموعات وإضافة العناصر
print("--- 1. إنشاء المجموعات وإضافة العناصر ---")
my_set = set()
print(f"المجموعة الفارغة: {my_set}")
fruits = {"تفاح", "برتقال", "موز"}
print(f"مجموعة الفواكه الأولية: {fruits}")
fruits.add("فراولة")
fruits.add("تفاح")
print(f"مجموعة الفواكه بعد الإضافة: {fruits}")
fruits.remove("برتقال")
print(f"مجموعة الفواكه بعد الإزالة: {fruits}\n")
# 2. العمليات الرياضية على المجموعات
print("--- 2. العمليات الرياضية على المجموعات ---")
set_a = {1, 2, 3, 4, 5}
set_b = {4, 5, 6, 7, 8}
union_set = set_a.union(set_b)
print(f"الاتحاد (union): {union_set}")
intersection_set = set_a.intersection(set_b)
print(f"التقاطع (intersection): {intersection_set}")
difference_set_ab = set_a.difference(set_b)
print(f"الفرق (set_a - set_b): {difference_set_ab}")
symmetric_difference_set = set_a.symmetric_difference(set_b)
print(f"الفرق المتماثل: {symmetric_difference_set}\n")
# 3. التحقق من وجود العناصر والمجموعات الفرعية
print("--- 3. التحقق من وجود العناصر والمجموعات الفرعية ---")
my_numbers = {10, 20, 30, 40, 50}
subset_numbers = {10, 20}
other_numbers = {10, 60}
is_30_in = 30 in my_numbers
is_90_in = 90 in my_numbers
print(f"هل 30 موجود في my_numbers؟ {is_30_in}")
print(f"هل 90 موجود في my_numbers؟ {is_90_in}")
is_subset = subset_numbers.issubset(my_numbers)
print(f"هل subset_numbers مجموعة فرعية من my_numbers؟ {is_subset}")
is_superset = my_numbers.issuperset(subset_numbers)
print(f"هل my_numbers مجموعة عليا من subset_numbers؟ {is_superset}")
النتيجة المتوقعة
عند تشغيل الكود النهائي، ستشاهد مخرجات توضح كيفية عمل المجموعات في بايثون، بدءاً من إنشائها وإضافة العناصر، مروراً بإجراء العمليات الرياضية المعقدة مثل الاتحاد والتقاطع، وانتهاءً بالتحقق من وجود العناصر والعلاقات بين المجموعات. ستكون المخرجات منظمة وواضحة، مما يعكس كل خطوة شرحناها في الدرس.