Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

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

  • مفهوم الكلاس set
  • حذف الـ set
  • فحص قيم الـ set
  • دوال الكلاس set
  • دوال جاهزة في بايثون للتعامل مع الـ set

مفهوم الكلاس 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 لحذف الـ set كما هي من الذاكرة.

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


في المثال التالي قمنا بتعريف 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 للبحث عن قيمة محددة في الـ 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

إسم الدالة مع تعريفها
1 add(elem) تستخدم لإضافة عنصر جديد في الـset الذي قام باستدعائها.
شاهد المثال
2 discard(elem) تستخدم لحذف عنصر محدد من الـset الذي قام باستدعائها.
مكان الباراميتر elem نمرر قيمة العنصر الذي نريد حذفه.
شاهد المثال
3 remove(elem) تستخدم لحذف عنصر محدد من الـset الذي قام باستدعائها.
مكان الباراميتر elem نمرر قيمة العنصر الذي نريد حذفه
ملاحظة: الفرق بينها و بين الدالة discard() أنها ترمي الإستثناء KeyError في حال لم يتم إيجاد عنصر في الـset يملك نفس قيمة الكائن الذي مررناه مكان الباراميتر elem.
شاهد المثال
4 clear() تستخدم لحذف جميع عناصر الـset الذي قام باستدعائها.
شاهد المثال
5 pop() تستخدم لإرجاع قيمة عنصر يتم إختياره بشكل عشوائي من الـset الذي قام باستدعائها و من بعدها يتم حذفه منه.
شاهد المثال
6 copy() ترجع نسخة من الـset الذي قام باستدعائها.
شاهد المثال
7 difference(*sets) ترجع set جديد يحتوي على القيم الموجودة في الـset الذي قام باستدعائها و الغير موجودة في كل set نمرره لها مكان الباراميتر sets*.
شاهد المثال
8 difference_update(*sets) تقارن قيم الـset الذي قام باستدعائها مع قيم كل set نمرره لها مكان الباراميتر sets*.
بعدها تحذف من الـset الذي قام باستدعائها القيم المشتركة بينهم.
شاهد المثال
9 intersection(*sets) ترجع set جديد يحتوي على القيم الموجودة في الـset الذي قام باستدعائها و في كل set نمرره لها مكان الباراميتر sets*.
شاهد المثال
10 intersection_update(*sets) تقارن قيم الـset الذي قام باستدعائها مع قيم كل set نمرره لها مكان الباراميتر sets*.
بعدها تحذف من الـset الذي قام باستدعائها القيم الغير مشتركة بينهم.
شاهد المثال
11 symmetric_difference(anotherSet) ترجع set جديد يحتوي على القيم الغير موجودة في كل من الـset الذي قام باستدعائها و في الـset الذي نمرره لها مكان الباراميتر anotherSet.
شاهد المثال
12 symmetric_difference_update(anotherSet) تقارن قيم الـset الذي قام باستدعائها مع قيم الـset الذي نمرره لها مكان الباراميتر anotherSet.
بعدها تضع في الـset الذي قام باستدعائها القيم المشتركة بينهما فقط و تمسح أي قيم أخرى كانت موجودة فيه.
شاهد المثال
13 union(sets*) ترجع set جديد يحتوي على القيم الموجودة في الـset الذي قام باستدعائها و القيم الموجودة في كل set نمرره لها مكان الباراميتر sets*.
شاهد المثال
14 update(sets*) تقارن قيم الـset الذي قام باستدعائها مع القيم الموجودة في كل set نمرره لها مكان الباراميتر sets*.
بعدها تضع في الـset الذي قام باستدعائها القيم المشتركة و الغير مشتركة بينهم.
شاهد المثال
15 isdisjoint(anotherSet) تقارن قيم الـset الذي قام باستدعائها مع قيم الـset الذي نمرره لها مكان الباراميتر anotherSet.
ترجع True إذا كانت جميع قيمهما مختلفة، و ترجع False إن لم يكونا كذلك.
شاهد المثال
16 issuperset(anotherSet) تقارن قيم الـset الذي قام باستدعائها مع قيم الـset الذي نمرره لها مكان الباراميتر anotherSet.
ترجع True إذا كانت جميع قيم الـset الذي نمرره لها مكان الباراميتر anotherSet موجودة في الـset الذي قام باستدعائها، غير ذلك ترجع False.
شاهد المثال
17 issubset(anotherSet) تقارن قيم الـset الذي قام باستدعائها مع قيم الـset الذي نمرره لها مكان الباراميتر anotherSet.
ترجع True إذا كانت جميع قيم الـset الذي قام باستدعائها موجودة في anotherSet، غير ذلك ترجع False.
شاهد المثال

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

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