نوع البيانات set
نوع البيانات set

تستخدم المجموعة set لتخزين عدة عناصر في متغير واحد ، وهي تستخدم لتخزين البيانات في شكل مجموعات مثل List و Tuple و Dictionary ، ولكل منها خصائص واستخدامات.
المجموعة set في بايثون
المجموعة set هي مجموعة غير مرتبة وغير قابلة للتغيير وغير مفهرسة ولا يمكن تعديل عناصر المجموعة set ولكن يمكن حذف العناصر واضافة عناصر جديدة.
مثال علي طريقة كتابة set في بايثون
x = {"ahmed", "mohamed", "gamal"}
print(x)
تتشابة set مع القاموس ولكن set لا تمتلك مفتاح key مثل القاموس dictionary:
x = {"ahmed", "mohamed", "gamal"}
print(x['ahmed'])
وتتشابة ايضا مع list, tuple ولكنها لا تمتلك فهرس index:
x = {"ahmed", "mohamed", "gamal"}
print(x[0])
غير مسموح بتكرار البيانات في set وسوف يتم تخطي المتكرر:
x = {"ahmed", "mohamed", "ahmed", "gamal", "gamal"}
print(x)
عدد العناصر في set
يمكن الوصول لعدد العناصر في المجموعة set بنفس اسلوب انواع بيانات التسلسل list, tuple, string من خلال الدالة len().
x = {"ahmed", "mohamed", "gamal"}
print(len(x))
انواع البيانات في set
يمكن ان تحتوي المجموعة set علي اي نوع من انواع البيانات:
x = {"ahmed", "mohamed", "gamal"}
y = {"def", 1, "mohamed", 5.4, True, False}
z = {1, 2, 3}
print("x: {}\ny: {}\nz: {}".format(x,y,z))
نوع بيانات set
يمكن الحصول علي نوع البيانات من خلال دالة type():
x = {"ahmed", "mohamed", "gamal"}
print(type(x))
التصريح عن set من خلال الكلمة المحجوزة set:
x = set(("ahmed", "mohamed", "gamal"))
print(x)
print(type(x))
print(len(x))
الوصول لعنصر داخل set
لا يمكن الوصول لعنصر داخل set من خلال المفتاح او رقم الفهرس، ولكن يمكن استخدام حلقة التكرار for loop مع الكلمة المحجوزة in للتكرار داخل المجموعة set وطباعة عناصرها واحد تلو الاخر.
x = {"ahmed", "mohamed", "gamal"}
for i in x:
print(i)
التحقق من وجود عنصر في المجموعة set
يمكن التحقق من وجود عنصر في set من خلال الكلمة المحجوزة in وهي تستخدم بشكل متكرر للتكرار في x او للتحقق من وجود عنصر في x.
وفي حالة التحقق من وجود عنصر في x ترجع قيمة منطقية True في حالة وجود العنصر و False في حالة عدم وجودة.
x = {"ahmed", "mohamed", "gamal"}
print("mohamed" in x)
print("yossef" in x)
اضافة عنصر الي set
لا يمكن تعديل عناصر المجموعة set بعد التصريح عنها ولكن يمكن اضافة عناصر جديدة من خلال الدالة add() :
x = {"ahmed", "mohamed", "gamal"}
x.add("yossef")
print(x)
اضافة مجموعة set الي اخري
يمكن اضافة مجموعة set الي مجموعة اخري من خلال الدالة update():
x = {"ahmed", "mohamed", "gamal"}
y = {1, 2 , True, False}
x.update(y)
print(x)
لاحظ في المثال السابق لم يتم اضافة True الي المجموعة x والسبب ان set لا تقبل نفس القيمة مرتين ، واذا كنت تعتقد ان True لم تتكرر فيجب ان تعلم ان True و 1 هما نفس القيمة في نظر بايثون وFalse و 0 متساويان ايضاً.
يمكنك اضافة 0 الي x او y واعادة التشغيل ومشاهدة النتيجة.
يمكن ايضا دمج اي كائن من الكائنات القابلة للتكرار مثل list , tuple , dictionary من خلال الدالة update():
x = {"ahmed", "mohamed", "gamal"}
y = (1, 2 , 3, 4, 5)
z = {"foo":"aa", "bar":"bb"}
a = "ABC"
x.update(y)
x.update(z)
x.update(a)
print(x)
دمج set بواسطة union()
يمكن ايضا الدمج بواسطة الدالة union والحصول علي مجموعة set جديدة:
x = {"ahmed", "mohamed", "gamal"}
y = (1, 2 , 3, "ahmed", 4, 5)
z = x.union(y)
print(z)
حذف عنصر في set
يمكن حذف العناصر في set من خلال الدالة remove() او الدالة discard().
حذف عنصر من خلال الدالة remove
x = {"ahmed", "mohamed", "gamal"}
x.remove("ahmed")
print(x)
ملاحظة : اذا كان العنصر غير موجود في set سوف تحصل علي خطا:
x = {"ahmed", "mohamed", "gamal"}
x.remove("yossef")
print(x)
علي عكس دالة discard فلا مشكلة ان كان العنصر غير موجود في set
حذف عنصر من خلال دالة discard()
x = {"ahmed", "mohamed", "gamal"}
x.discard("ahmed")
x.discard("yossef")
print(x)
لاحظ ان yossef غير موجود في x ومع ذلك لم يحدث خطا.
حذف عنصر بواسطة pop()
يمكن ايضاً استخدام دالة pop لحذف عنصر في set ولكن بما ان set غير مرتبة فسوف يتم حذف عنصر عشوائي
x = {"ahmed", "mohamed", "gamal"}
c = x.pop()
print(c)
print(x)
حذف كل عناصر set
يمكن من خلال دالة clear() حذف جميع عناصر المجموعة set:
x = {"ahmed", "mohamed", "gamal"}
x.clear()
print(x)
ويمكن ايضاً حذف المجموعة set بالكامل من خلال الكلمة المحجوزة del:
x = {"ahmed", "mohamed", "gamal"}
del x
print(x)
كما تلاحظ لم يعد هناك متغير باسم x
الاحتفاظ بالقيمة المشتركة
من خلال الدالة intersection_update() يمكن الاحتفاظ بالقيم المشتركة بين مجموعتان set:
x = {"ahmed", "mohamed", "gamal", "b"}
y = {"a", "b", "gamal"}
x.intersection_update(y)
print(x)
ومن خلال الدالة intersection() سوف تحصل علي مجموعة جديدة تحتوي علي القيم المشتركة بين مجموعتين set:
x = {"ahmed", "mohamed", "gamal", "b"}
y = {"a", "b", "gamal"}
z = x.intersection(y)
print(z)
ومن خلال الدالة symmetric_difference_update() سوف تحصل علي القيم غير المشتركة بين مجموعتين set:
x = {"ahmed", "mohamed", "gamal", "b"}
y = {"a", "b", "gamal"}
x.symmetric_difference_update(y)
print(x)
ومن خلال الدالة symmetric_difference() سوف تحصل علي set جديدة تحتوي علي القيم الغير مشتركة بين مجموعتين set:
x = {"ahmed", "mohamed", "gamal", "b"}
y = {"a", "b", "gamal"}
z = x.symmetric_difference(y)
print(z)
ومن خلال الدالة difference() تحصل علي مجموعة جديدة تحتوي علي قيم موجودة في set الاولي وليست موجودة في set الاخري:
x = {"ahmed", "mohamed", "gamal", "b"}
y = {"a", "b", "gamal"}
z = x.difference(y)
z2 = y.difference(x)
print(z)
print(z2)
في مثال بايثون السابق متغير z سوف يحتوي علي القيم الموجودة في x وليست موجودة في y.
ومتغير z2 سوف يحتوي علي القيم الموجودة في y وليست موجودة في x.
ومن خلال الدالة difference_update() يصبح set x بدون القيم المشتركة في y:
x = {"ahmed", "mohamed", "gamal", "b"}
y = {"a", "b", "gamal"}
x.difference_update(y)
print(x)
ومن خلال الدالة isdisjoint() يمكن التحقق من وجود عناصر مشتركة بين مجموعتان set ، وينتج عنها قيمة منطقية True او False:
x = {"ahmed", "mohamed", "gamal", "b"}
y = {"a", "b", "gamal"}
z = x.isdisjoint(y)
print(z)
في المثال السابق قيمة z تساوي قيمة منطقية False بسبب وجود عناصر مشتركة بين x و y . قم بحذف العناصر المشتركة واعد الضغط علي زر التشغيل وسوف تحصل علي قيمة True.
ومن خلال دالة issubset() يمكن التحقق من وجود مجموعة x داخل مجموعة y وفي حالة وجود كامل عناصر set x في set y تحصل علي قيمة منطقية True ، او False في حالة عدم وجود كامل العناصر في set y.
x = {"gamal", "a"}
y = {"a", "b", "gamal"}
z = x.issubset(y)
print(z)
عند تشغيل المثال السابق تحصل علي قيمة True . حاول اضافة عنصر جديد الي set x يكون غير موجود في set y واعد تشغيل المثال.
ومن خلال دالة issuperset() يمكن التحقق من وجود مجموعة set y بالكامل في set x وارجاع قيمة True ، او False في حالة عدم وجود جميع عناصر set y في مجموعة set x.
x = {"a", "b", "gamal"}
y = {"gamal", "a"}
z = x.issuperset(y)
print(z)
ومن خلال دالة copy() يمكن نسخ المجموعة x الي مجموعة جديدة y:
x = {"a", "b", "gamal"}
y = x.copy()
print(y)
تستخدم دالة copy() مع جميع انواع البيانات والهدف منها هو عمل نسخة من الكائن حتي اذا ما تغير احداهم لا يتغير الاخر.
لنوضح الدالة من خلال المثال التالي:
x = {"a", "b", "gamal"}
y = x
y.pop()
print(x)
print(y)
في محرر بايثون السابق قمنا بعمل نسخ عادي للمجموعة x من خلال التصريح عن متغير y يساوي x ، وعلي السطر التالي له قمنا باستخدام دالة pop() لحذف عنصر من المجموعة الجديدة y ونتيجة هذا تم حذف العنصر من المجموعتان x و y معاً وليس مجموعة y الجديدة فقط.
لذلك يتم استخدام دالة copy() لعمل نسخة غير مرتبطة بالاصل.
تمرين بايثون علي المجموعة SET
بعد ان تعرفت علي نوع البيانات set والدوال الخاصة به وكيفية الانشاء ، والحذف، والدمج، .... ، لنختبر ما تعلمتة في هذا الدرس وفي الدروس السابقة.
داخل المحرر التالي قم بانشاء دالة جديدة باسم weAreHere مع براميتر x و y.
ومن داخل الدالة قم بالتحقق من وجود كامل مجموعة x في y ثم ارجع قيمة منطقية True في حالة وجود كامل مجموعة x في y ، وقيمة False اذا لم تكن مجموعة x بالكامل موجودة في مجموعة y.
اذا لم تكن تعرف كيفية انشاء الدوال وارجاع البيانات راجع درس مقدمة عن الدوال في بايثون .
Next
التعليقات
- من خلال الضغط علي زر {;} في شريط الادوات يمكنك اضافة اكواد بايثون الي التعليق للتجربة اون لاين.
- برجاء مراعاة قواعد الكتابة، والادب.