الكلاس set في بايثون

مفهوم الكلاس set في بايثون

الـ set عبارة عن مصفوفة ليس لها حجم ثابت, يمكنها تخزين قيم من مختلف الأنواع في وقت واحد, و لا يمكن تبديل أو حذف قيمها بشكل مباشر.
كما أنه لا يمكنها أن تحتوي على قيم مكررة. أي إذا وضعت فيها نفس القيمة مرتين فإنه سيتم تخزين قيمة واحدة فيها و ليس قيمتين.

النوع set لا يحافظ على الترتيب الذي تم فيه إدخال العناصر لأنه لا يضيف رقم Index لكل عنصر كما يفعل النوع list و النوع tuple.
لذلك لا تستغرب إذا قمت بتخزين مجموعة قيم بداخل set ثم حاولت عرضها. لأنك في كل مرة ستقوم فيها بتشغيل البرنامج من جديد ستتبدل أماكن القيم.


طريقة تعريف set في بايثون

لتعريف set نستخدم الرمز { }.
بداخل هذا الرمز يمكنك تمرير القيم بشكل مباشر له بشرط وضع فاصلة بين كل عنصرين.


في المثال التالي قمنا بتعريف set وضعنا فيه أعداد صحيحة.

المثال الأول

Test.py
                      numbers = {10, 20, 30, 40, 50}       # يحتوي على أعداد صحيحة فقط numbers إسمه set هنا قمنا بتعريف
		print(numbers)                       # ( أي كما قمنا بتعريفه ) كما هو numbers هنا قمنا بعرض محتوى الكائن
		

سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل لأننا لا نعرف كيف سيتم ترتيب العناصر.

{40, 10, 50, 20, 30}


في المثال التالي قمنا بتعريف set وضعنا فيه نصوص.

المثال الثاني

Test.py
                        names = {'Rami', 'Sara', 'Nada'}      # يحتوي على نصوص فقط names إسمه set هنا قمنا بتعريف
		  print(names)                          # ( أي كما قمنا بتعريفه ) كما هو names هنا قمنا بعرض ما يحتويه الكائن
		

سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل لأننا لا نعرف كيف سيتم ترتيب العناصر.

{'Sara', 'Rami', 'Nada'}


في المثال التالي قمنا بتعريف set وضعنا فيه أعداد صحيحة و نصوص.

المثال الثالث

Test.py
                      data = {1, 'Mhamad', 'Harmush', 1500}      # يحتوي على أعداد صحيحة و نصوص data إسمه set هنا قمنا بتعريف
		print(data)                                # ( أي كما قمنا بتعريفه ) كما هو data هنا قمنا بعرض ما يحتويه الكائن
		

سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل لأننا لا نعرف كيف سيتم ترتيب العناصر.

{'Harmush', 1, 1500, 'Mhamad'}


في المثال التالي قمنا بتعريف set وضعنا فيه نصوص و قمنا بتكرار هذه النصوص عن قصد لإثبات فكرة أن النوع set لا يقوم بتخزين نفس القيمة أكثر من مرة.

المثال الرابع

Test.py
                      # يحتوي على نصوص و لاحظ أننا قمنا بتكرار بعض القيم names إسمه set هنا قمنا بتعريف
		names = {'Rami', 'Rami', 'Rami', 'Nada', 'Nada', 'Ahmad'}

		# ( أي كما قمنا بتعريفه ) كما هو. لاحظ أنه لا يحتوي على قيم مكررة names هنا قمنا بعرض ما يحتويه الكائن
		print(names)
		

سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل لأننا لا نعرف كيف سيتم ترتيب العناصر.

{'Ahmad', 'Rami', 'Nada'}

حذف الـ set بواسطة الجملة del في بايثون

الجملة del تستخدم لحذف الـ set كما هي من الذاكرة.


في المثال التالي قمنا بتعريف set وضعنا فيه أرقام. بعدها قمنا بحذفه من الذاكرة. بعدها حاولنا أن نعرض ما يحتويه.

مثال

Test.py
                        # وضعنا فيه أعداد صحيحة arr إسمه set هنا قمنا بتعريف
		  arr = {10, 20, 30, 40, 50}

		  del arr       # كما هو من الذاكرة arr هنا قمنا بحذف الكائن

		  print(arr)    # و الذي في الأصل قمنا بحذفه من الذاكرة لذلك سيظهر خطأ عند التشغيل arr هنا حاولنا عرض ما يحتويه الكائن
		

سنحصل على النتيجة التالية عند التشغيل.

NameError: name 'arr' is not defined

التشييك على قيم الـ ">set بواسطة العامل in في بايثون

العامل in يستخدم للبحث في الـ set عن قيمة معينة أو للمرور على قيمه عند إستخدامه في الحلقة for.


في المثال التالي إستخدمنا العامل in للبحث في الـ set عن قيمة معينة.

المثال الأول

Test.py
                  arr = {'Mhamad', 'Rony', 'Rima', 'Sara'}     # وضعنا فيه مجموعة قيم نصية arr إسمه set هنا قمنا بتعريف

		x = 'Rima'                                   # وضعنا فيه نص x هنا قمنا بتعريف متغير إسمه

		print('Is Rima in the set?')
		print(x in arr)                              # True إذا تم إيجادها سيتم عرض .arr في الكائن x هنا سيتم البحث عن قيمة
	  

سنحصل على النتيجة التالية عند التشغيل.

Is Rima in the set?
True


في المثال التالي قمنا بتعريف set وضعنا فيه نصوص. بعدها قمنا بعرض جميع القيم الموضوعة فيه باستخدام الحلقة for.

المثال الثاني

Test.py
        # وضعنا فيه قيم نصية تمثل أسماء أشخاص names إسمه set هنا قمنا بتعريف
        names = {'Rami', 'Sara', 'Nada', 'Mhamad', 'Salem'}

        # و من ثم سيتم طباعتها x في المتغير names في كل مرة سيتم وضع قيمة عنصر من عناصر الكائن
        for x in names:
        print(x)
	  

سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل لأننا لا نعرف كيف سيتم ترتيب العناصر.

Nada
Salem
Mhamad
Rami
Sara

دوال الكلاس set في بايثون

إسم الدالة مع تعريفها
add(elem) تستخدم لإضافة عنصر جديد في الـset الذي قام باستدعائها.
شاهد المثال »
discard(elem) تستخدم لحذف عنصر محدد من الـset الذي قام باستدعائها.
مكان الباراميتر elem نمرر كائن قيمته تطابق قيمة العنصر الذي نريد حذفه.
شاهد المثال »
remove(elem) تستخدم لحذف عنصر محدد من الـset الذي قام باستدعائها.
مكان الباراميتر elem نمرر كائن قيمته تطابق قيمة العنصر الذي نريد حذفه.
ملاحظة: الفرق بينها و بين الدالة discard() أنها ترمي الإستثناء KeyError في حال لم يتم إيجاد عنصر في الـset يملك نفس قيمة الكائن الذي مررناه مكان الباراميتر elem.
شاهد المثال »
clear() تستخدم لحذف جميع عناصر الـset الذي قام باستدعائها.
شاهد المثال »
pop() تستخدم لإرجاع قيمة عنصر يتم إختياره بشكل عشوائي من الـset الذي قام باستدعائها, بعدها يتم حذفه منه.
شاهد المثال »
copy() ترجع نسخة من الـset الذي قام باستدعائها.
شاهد المثال »
difference(*sets) ترجع set جديد يحتوي على العناصر الموجودة في الـset الذي قام باستدعائها و الغير موجودة في كل set نمرره لها مكان الباراميتر sets*.
شاهد المثال »
difference_update(*sets) تقارن الـset الذي قام باستدعائها مع كل set نمرره لها مكان الباراميتر sets*.
بعدها تحذف من الـset الذي قام باستدعائها العناصر المشتركة بينهم.
شاهد المثال »
intersection(*sets) ترجع set جديد يحتوي على العناصر الموجودة في الـset الذي قام باستدعائها و في كل set نمرره لها مكان الباراميتر sets*.
شاهد المثال »
intersection_update(*sets) تقارن الـset الذي قام باستدعائها مع كل set نمرره لها مكان الباراميتر sets*.
بعدها تحذف من الـset الذي قام باستدعائها العناصر الغير مشتركة بينهم.
شاهد المثال »
symmetric_difference(anotherSet) ترجع set جديد يحتوي على العناصر الغير موجودة في كل من الـset الذي قام باستدعائها و في الـset الذي نمرره لها مكان الباراميتر anotherSet.
شاهد المثال »
symmetric_difference_update(anotherSet) تقارن الـset الذي قام باستدعائها مع الـset الذي نمرره لها مكان الباراميتر anotherSet.
بعدها تضع في الـset الذي قام باستدعائها العناصر المشتركة بينهما فقط و تمسح أي عناصر آخرى كانت موجودة فيه.
شاهد المثال »
union(sets*) ترجع set جديد يحتوي على العناصر الموجودة في الـset الذي قام باستدعائها و العناصر الموجودة في كل set نمرره لها مكان الباراميتر sets*.
شاهد المثال »
update(sets*) تقارن عناصر الـset الذي قام باستدعائها مع العناصر الموجودة في كل set نمرره لها مكان الباراميتر sets*.
بعدها تضع في الـset الذي قام باستدعائها العناصر المشتركة و الغير مشتركة بينهم.
شاهد المثال »
isdisjoint(anotherSet) تقارن عناصر الـset الذي قام باستدعائها مع عناصر الـset الذي نمرره لها مكان الباراميتر anotherSet.
ترجع True إذا كانا لا يحتوان على عناصر قيمها متساوية. و ترجع False إن لم يكونا كذلك.
شاهد المثال »
issuperset(anotherSet) تقارن عناصر الـset الذي قام باستدعائها مع عناصر الـset الذي نمرره لها مكان الباراميتر anotherSet.
ترجع True إذا كانت جميع عناصر الـset الذي نمرره لها مكان الباراميتر anotherSet موجودة في الـset الذي قام باستدعائها.
غير ذلك ترجع False.
شاهد المثال »
issubset(anotherSet) تقارن عناصر الـset الذي قام باستدعائها مع عناصر الـset الذي نمرره لها مكان الباراميتر anotherSet.
ترجع True إذا كانت جميع عناصر الـset الذي قام باستدعائها موجودة في الـset الذي نمرره لها مكان الباراميتر anotherSet.
غير ذلك ترجع False.
شاهد المثال »

دوال جاهزة في بايثون للتعامل مع الـ set

إسم الدالة مع تعريفها
len(set) ترجع عدد صحيح يمثل عدد عناصر الـset الذي نمرره لها عند إستدعاءها.
شاهد المثال »
min(set) ترجع أصغر قيمة موجودة في الـset الذي نمرره لها عند إستدعاءها.
شاهد المثال »
max(set) ترجع أكبر قيمة في الـset الذي نمرره لها عند إستدعاءها.
شاهد المثال »
set(sequence) ترجع نسخة من أي كائن يحتوي مجموعة عناصر نمرره لها عند إستدعاءها ككائن من الكلاس الـset.
شاهد المثال »

Python الدالة isdisjoint()

تعريفها

تقارن عناصر الـset الذي قام باستدعائها مع عناصر الـset الذي نمرره لها مكان الباراميتر anotherSet.
ترجع True إذا كانا لا يحتوان على عناصر قيمها متساوية. و ترجع False إن لم يكونا كذلك.



بناؤها

set.isdisjoint(anotherSet)
  


باراميترات

مكان الباراميتر anotherSet نمرر الـset الذي سيتم مقارنة عناصره مع عناصر الـset الذي قام باستدعائها.



قيمة الإرجاع

ترجع True إذا كان الـset الذي قام باستدعائها و الـset الذي مررناه لها لا يحتوان على عنصر واحد على الأقل قيمته متساوية.
غير ذلك ترجع False.


مثال

Test.py
# وضعنا فيهم أرقام صحيحة set هنا قمنا بتعريف ثلاثة
	  set1 = {1, 2, 3}
	  set2 = {1, 7}
	  set3 = {4, 5, 6}

	  # لأنهما يحتويان على قيم متساوية False سترجع .set2 و set1 عند مقارنة عناصر الكائنين isdisjoint() هنا قمنا بعرض ما سترجعه الدالة
	  print('set1 disjoint set2?', set1.isdisjoint(set2))

	  # لأنهم لا يحتويان على قيم متساوية True سترجع .set3 و set1 عند مقارنة عناصر الكائنين isdisjoint() هنا قمنا بعرض ما سترجعه الدالة
	  print('set1 disjoint set3?', set1.isdisjoint(set3))
    

سنحصل على النتيجة التالية عند التشغيل.

set1 disjoint set2? False
set1 disjoint set3? True

Python الدالة issuperset()

تعريفها

تقارن عناصر الـset الذي قام باستدعائها مع عناصر الـset الذي نمرره لها مكان الباراميتر anotherSet.

ترجع True إذا كانت جميع عناصر الـset الذي نمرره لها مكان الباراميتر anotherSet موجودة في الـset الذي قام باستدعائها.
غير ذلك ترجع False.



بناؤها

set.issuperset(anotherSet)
  


باراميترات

مكان الباراميتر anotherSet نمرر الـset الذي سيتم مقارنة عناصره مع عناصر الـset الذي قام باستدعائها.



قيمة الإرجاع

ترجع True إذا كانت جميع عناصر الـset الذي نمرره لها مكان الباراميتر anotherSet موجودة في الـset الذي قام باستدعائها.
غير ذلك ترجع False.


المثال الأول

Test.py
# وضعنا فيهما أرقام صحيحة set هنا قمنا بتعريف إثنين
	  set1 = {1, 2, 3, 4, 5}
	  set2 = {1, 2, 3}

	  # set2 يحتوي على جميع عناصر set1 لأن True سترجع .set2 و set1 عند مقارنة عناصر الكائنين issuperset() هنا قمنا بعرض ما سترجعه الدالة
	  print(set1.issuperset(set2))
    

سنحصل على النتيجة التالية عند التشغيل.

True


المثال الثاني

Test.py
# وضعنا فيهما أرقام صحيحة set هنا قمنا بتعريف إثنين
	  set1 = {1, 2, 3}
	  set2 = {1, 2, 3, 4, 5}

	  # set2 لا يحتوي على جميع عناصر set1 لأن False سترجع .set2 و set1 عند مقارنة عناصر الكائنين issuperset() هنا قمنا بعرض ما سترجعه الدالة
	  print(set1.issuperset(set2))
    

سنحصل على النتيجة التالية عند التشغيل.

False

Python الدالة issubset()

تعريفها

تقارن عناصر الـset الذي قام باستدعائها مع عناصر الـset الذي نمرره لها مكان الباراميتر anotherSet.

ترجع True إذا كانت جميع عناصر الـset الذي قام باستدعائها موجودة في الـset الذي نمرره لها مكان الباراميتر anotherSet.
غير ذلك ترجع False.



بناؤها

                  set.issubset(anotherSet)
  


باراميترات

مكان الباراميتر anotherSet نمرر الـset الذي سيتم مقارنة عناصره مع عناصر الـset الذي قام باستدعائها.



قيمة الإرجاع

ترجع True إذا كانت جميع عناصر الـset الذي قام باستدعائها موجودة في الـset الذي نمرره لها مكان الباراميتر anotherSet.
غير ذلك ترجع False.


المثال الأول

Test.py
                    # وضعنا فيهما أرقام صحيحة set هنا قمنا بتعريف إثنين
	  set1 = {1, 2, 3}
	  set2 = {1, 2, 3, 4, 5}

	  # set1 يحتوي على جميع عناصر set2 لأن True سترجع .set2 و set1 عند مقارنة عناصر الكائنين issubset() هنا قمنا بعرض ما سترجعه الدالة
	  print(set1.issubset(set2))
	

سنحصل على النتيجة التالية عند التشغيل.

True


المثال الثاني

Test.py
                    # وضعنا فيهما أرقام صحيحة set هنا قمنا بتعريف إثنين
	  set1 = {1, 2, 3, 4, 5}
	  set2 = {1, 2, 3}

	  # set1 لا يحتوي على جميع عناصر set2 لأن False سترجع .set2 و set1 عند مقارنة عناصر الكائنين issubset() هنا قمنا بعرض ما سترجعه الدالة
	  print(set1.issubset(set2))
	

سنحصل على النتيجة التالية عند التشغيل.

False

Python الدالة len()

تعريفها

ترجع عدد صحيح يمثل عدد عناصر الـset الذي نمرره لها عند إستدعاءها.



بناؤها

                  len(set)
  


باراميترات

مكان الباراميتر set نمرر الـset الذي نريد الحصول على عدد عناصره.



قيمة الإرجاع

ترجع عدد صحيح يمثل عدد عناصر الـset الذي نمرره لها عند إستدعاءها.


مثال

Test.py
                    # وضعنا فيه مجموعة أعداد صحيحة aSet إسمه set هنا قمنا بتعريف
	  aSet = {1, 2, 3, 4, 5}

	  # len() الذي سترجعه الدالة aSet هنا قمنا بعرض عدد عناصر الكائن
	  print('Array length is:', len(aSet))
	

سنحصل على النتيجة التالية عند التشغيل.

Array length is: 5

Python الدالة min()

تعريفها

ترجع أصغر قيمة في الـset الذي نمرره لها عند إستدعاءها.



بناؤها

min(set)
  


باراميترات

مكان الباراميتر set نمرر الـset الذي نريد الحصول على أصغر قيمة فيه.



قيمة الإرجاع

ترجع أصغر قيمة في الـset الذي نمرره لها عند إستدعاءها.


مثال

Test.py
# وضعنا فيه مجموعة أعداد صحيحة aSet إسمه set هنا قمنا بتعريف
	  aSet = {5, 2, 4, 6, 3}

	  # min() و التي سترجعها الدالة aSet هنا قمنا بعرض اصغر قيمة في الكائن
	  print('Minimum value is:', min(aSet))
    

سنحصل على النتيجة التالية عند التشغيل.

Minimum value is: 2

Python الدالة max()

تعريفها

ترجع أكبر قيمة في الـset الذي نمرره لها عند إستدعاءها.



بناؤها

max(set)
  


باراميترات

مكان الباراميتر set نمرر الـset الذي نريد الحصول على أكبر قيمة فيه.



قيمة الإرجاع

ترجع أكبر قيمة في الـset الذي نمرره لها عند إستدعاءها.


مثال

Test.py
# وضعنا فيه مجموعة أعداد صحيحة aSet إسمه set هنا قمنا بتعريف
	  aSet = {5, 2, 4, 6, 3}

	  # max() و التي سترجعها الدالة aSet هنا قمنا بعرض أكبر قيمة في الكائن
	  print('Maximum value is:', max(aSet))
    

سنحصل على النتيجة التالية عند التشغيل.

Maximum value is: 6

Python الدالة set()

تعريفها

ترجع نسخة من أي كائن يحتوي مجموعة عناصر نمرره لها عند إستدعاءها ككائن من الكلاس الـset.



بناؤها

                  set(sequence)
  


باراميترات

مكان الباراميتر sequence نمرر كائن يمثل كائن يمثل مجموعة عناصر.



قيمة الإرجاع

ترجع نسخة من أي كائن يحتوي مجموعة عناصر نمرره لها عند إستدعاءها ككائن من الكلاس الـset.


المثال الأول

Test.py
                    # وضعنا فيه مجموعة أعداد صحيحة aList إسمه list هنا قمنا بتعريف
	  aList = [1, 2, 3, 4, 5]

	  # aSet الذي سترجعه في الكائن set بعدها قمنا بتخزين كائن الـ .set لترجع نسخة منه ككائن من الكلاس aList على الكائن set() هنا قمنا باستدعاء الدالة
	  aSet = set(aList)

	  # aSet هنا قمنا بعرض ما يحتويه الكائن
	  print(aSet)
	

سنحصل على النتيجة التالية عند التشغيل.

{1, 2, 3, 4, 5}

Python الدالة add()

تعريفها

تستخدم لإضافة عنصر جديد في الـset الذي قام باستدعائها.



بناؤها

                  set.add(elem)
  


باراميترات

مكان الباراميتر x نمرر الكائن الذي نريد إضافته في الـset.



قيمة الإرجاع

لا ترجع قيمة.


مثال

Test.py
                    aSet = {'Apple', 'Banana', 'Mango'}    # وضعنا فيه 3 عناصر aSet إسمه set هنا قمنا بتعريف
	  print('Before:', aSet)                 # aSet هنا قمنا بعرض ما يحتويه الكائن

	  aSet.add('Orange')                     # aSet هنا قمنا بإضافة نص كعنصر جديد في آخر الكائن
	  print('After: ', aSet)                 # من جديد aSet هنا قمنا بعرض ما يحتويه الكائن
	

سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل لأننا لا نعرف كيف سيتم ترتيب العناصر.

Before: {'Apple', 'Banana', 'Mango'}
After:  {'Apple', 'Orange', 'Banana', 'Mango'}