أساسيات بايثون 19: شرح Set في Python للمبتدئين والفرق بينها وبين List و Tuple

أساسيات بايثون 19 شرح Set في Python للمبتدئين والفرق بينها وبين List و Tuple

بعد أن تعلمنا في الدروس السابقة القوائم Lists والصفوف Tuples والقواميس Dictionaries، نصل الآن إلى نوع مهم آخر من أنواع البيانات في بايثون، وهو Set.

الـ Set في Python تستخدم لتخزين مجموعة من العناصر داخل متغير واحد، لكنها تختلف عن List و Tuple في نقطة مهمة جدًا: لا تسمح بتكرار العناصر.

يعني إذا كان عندك قائمة فيها أرقام أو أسماء مكررة، يمكنك استخدام Set للحصول على القيم الفريدة فقط. لذلك تعتبر Sets مفيدة جدًا في إزالة التكرار، فحص وجود عنصر، والمقارنة بين مجموعتين من البيانات.

في هذا الدرس من سلسلة أساسيات بايثون على بايثون العرب ستتعلم ما هي Set، وكيف تنشئها، وكيف تضيف وتحذف عناصر منها، وما الفرق بينها وبين List و Tuple، ومتى تستخدمها في مشاريعك البرمجية.

{getToc} $title={محتوى المقال}

{alertInfo} Set في بايثون هي مجموعة عناصر غير مكررة، وتفيد عندما تريد إزالة التكرار أو مقارنة مجموعات من البيانات.

شرح فكرة Set في Python وكيف تخزن عناصر غير مكررة داخل مجموعة واحدة

ما هي Set في Python؟

الـ Set هي نوع بيانات في بايثون يستخدم لتخزين مجموعة من العناصر داخل متغير واحد. تشبه القائمة في أنها تجمع أكثر من قيمة، لكنها تختلف عنها لأنها لا تقبل العناصر المكررة، ولا تعتمد على ترتيب ثابت للعناصر.

مثال بسيط:

numbers = {1, 2, 3, 3, 4}

print(numbers)

الناتج:

{1, 2, 3, 4}

لاحظ أن الرقم 3 كان مكررًا في الكود، لكن Set احتفظت به مرة واحدة فقط.

{alertSuccess} أهم فكرة يجب أن تتذكرها: Set لا تسمح بتكرار العناصر.

طريقة إنشاء Set في بايثون

لإنشاء Set نستخدم الأقواس المعقوفة {} ونضع بداخلها العناصر مفصولة بفواصل.

fruits = {"apple", "banana", "orange"}

print(fruits)

الناتج قد يظهر بهذا الشكل:

{'apple', 'banana', 'orange'}

وقد تلاحظ أحيانًا أن ترتيب العناصر عند الطباعة يختلف عن ترتيب كتابتها. هذا طبيعي؛ لأن Set لا تعتمد على ترتيب العناصر كما تفعل List.

ملاحظة مهمة حول إنشاء Set فارغة

قد تظن أن كتابة {} تنشئ Set فارغة، لكن هذا غير صحيح. في بايثون، الأقواس المعقوفة الفارغة تنشئ قاموسًا فارغًا dict وليس Set.

x = {}

print(type(x))

الناتج:

<class 'dict'>

لإنشاء Set فارغة، استخدم set():

x = set()

print(type(x))

الناتج:

<class 'set'>
{alertWarning} لا تستخدم {} لإنشاء Set فارغة، لأنها تنشئ Dictionary فارغًا. استخدم set() بدلًا من ذلك.

هل Set تحتفظ بالترتيب؟

لا تعتمد على ترتيب عناصر Set. قد تكتب العناصر بترتيب معين، ثم تظهر عند الطباعة بترتيب مختلف.

colors = {"red", "green", "blue"}

print(colors)

إذا كان ترتيب العناصر مهمًا في برنامجك، استخدم List بدل Set.

هل يمكن الوصول إلى عنصر في Set باستخدام index؟

لا، لا يمكنك استخدام الفهرسة مع Set مثل القوائم.

fruits = {"apple", "banana", "orange"}

print(fruits[0])

هذا الكود يؤدي إلى خطأ؛ لأن Set لا تدعم الوصول باستخدام index.

{alertInfo} Set مناسبة عندما يهمك وجود العنصر أو عدم تكراره، وليست مناسبة عندما تحتاج الوصول إلى العنصر برقم الفهرس.

إضافة عنصر إلى Set باستخدام add()

لإضافة عنصر واحد إلى Set نستخدم الدالة add().

fruits = {"apple", "banana"}

fruits.add("orange")

print(fruits)

الناتج قد يكون:

{'apple', 'banana', 'orange'}

ولو أضفت عنصرًا موجودًا مسبقًا، فلن يتكرر:

fruits = {"apple", "banana"}

fruits.add("apple")

print(fruits)

ستبقى apple مرة واحدة فقط.

إضافة عدة عناصر باستخدام update()

إذا أردت إضافة أكثر من عنصر إلى Set، استخدم update().

fruits = {"apple", "banana"}

fruits.update(["orange", "mango"])

print(fruits)

هنا أضفنا orange و mango إلى المجموعة.

حذف عنصر من Set باستخدام remove()

لحذف عنصر من Set نستخدم remove().

fruits = {"apple", "banana", "orange"}

fruits.remove("banana")

print(fruits)

الناتج قد يكون:

{'apple', 'orange'}

لكن انتبه: إذا حاولت حذف عنصر غير موجود باستخدام remove() سيظهر خطأ.

حذف عنصر من Set باستخدام discard()

الدالة discard() تحذف العنصر إذا كان موجودًا، ولا تسبب خطأ إذا لم يكن موجودًا.

fruits = {"apple", "banana", "orange"}

fruits.discard("mango")

print(fruits)

هنا لن يظهر خطأ، حتى لو أن mango غير موجودة داخل Set.

شرح إضافة وحذف عناصر Set في بايثون باستخدام add و remove و discard
{alertSuccess} إذا لم تكن متأكدًا أن العنصر موجود، استخدم discard() بدل remove() لتجنب الأخطاء.

فحص وجود عنصر داخل Set

يمكنك استخدام in لمعرفة هل العنصر موجود داخل Set أم لا.

fruits = {"apple", "banana", "orange"}

if "apple" in fruits:
    print("العنصر موجود")
else:
    print("العنصر غير موجود")

الناتج:

العنصر موجود

تحويل List إلى Set لإزالة التكرار

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

numbers = [1, 2, 2, 3, 3, 4]

unique_numbers = set(numbers)

print(unique_numbers)

الناتج:

{1, 2, 3, 4}

ولو أردت النتيجة كقائمة مرة أخرى:

numbers = [1, 2, 2, 3, 3, 4]

unique_numbers = list(set(numbers))

print(unique_numbers)
{alertWarning} تحويل List إلى Set يزيل التكرار، لكنه قد لا يحافظ على نفس ترتيب العناصر.

الفرق بين List و Tuple و Set في Python

بعد أن تعلمنا List و Tuple و Set، هذه مقارنة بسيطة تساعدك على اختيار النوع المناسب.

النوع طريقة الكتابة هل يقبل التكرار؟ هل يحافظ على الترتيب؟ هل يمكن التعديل؟ متى أستخدمه؟
List [1, 2, 3] نعم نعم نعم عندما تريد قائمة مرتبة وقابلة للتعديل
Tuple (1, 2, 3) نعم نعم لا عندما تريد بيانات ثابتة لا تتغير
Set {1, 2, 3} لا لا تعتمد عليه نعم عندما تريد عناصر غير مكررة أو مقارنة مجموعات
مقارنة توضح الفرق بين List و Tuple و Set في Python من حيث الترتيب والتكرار والتعديل

استخدام len() مع Set

يمكنك معرفة عدد عناصر Set باستخدام len().

skills = {"Python", "HTML", "CSS"}

print(len(skills))

الناتج:

3

التكرار على Set باستخدام for loop

يمكنك المرور على عناصر Set باستخدام حلقة for.

skills = {"Python", "HTML", "CSS"}

for skill in skills:
    print(skill)

قد يختلف ترتيب الطباعة لأن Set لا تعتمد على ترتيب ثابت.

دمج مجموعتين باستخدام union()

الدالة union() تستخدم لدمج مجموعتين مع حذف التكرار تلقائيًا.

frontend = {"HTML", "CSS", "JavaScript"}
backend = {"Python", "SQL", "JavaScript"}

all_skills = frontend.union(backend)

print(all_skills)

الناتج يحتوي على كل المهارات بدون تكرار JavaScript.

العناصر المشتركة باستخدام intersection()

الدالة intersection() تعرض العناصر المشتركة بين مجموعتين.

frontend = {"HTML", "CSS", "JavaScript"}
backend = {"Python", "SQL", "JavaScript"}

common = frontend.intersection(backend)

print(common)

الناتج:

{'JavaScript'}

العناصر المختلفة باستخدام difference()

الدالة difference() تعرض العناصر الموجودة في المجموعة الأولى وليست موجودة في المجموعة الثانية.

frontend = {"HTML", "CSS", "JavaScript"}
backend = {"Python", "SQL", "JavaScript"}

only_frontend = frontend.difference(backend)

print(only_frontend)

الناتج:

{'HTML', 'CSS'}
ملخص أهم أوامر Set في بايثون مثل union و intersection و difference و len

مثال عملي: إزالة أسماء مكررة من قائمة

تخيل أن عندك قائمة أسماء وفيها أسماء مكررة، وتريد استخراج الأسماء الفريدة فقط.

names = ["Ali", "Sara", "Ali", "Omar", "Sara"]

unique_names = set(names)

print(unique_names)

الناتج:

{'Ali', 'Sara', 'Omar'}

مثال عملي: معرفة المهارات المشتركة بين شخصين

هذا مثال ممتاز لفهم فائدة intersection() عند مقارنة مجموعتين من البيانات.

ahmed_skills = {"Python", "HTML", "CSS"}
sara_skills = {"Python", "JavaScript", "CSS"}

common_skills = ahmed_skills.intersection(sara_skills)

print(common_skills)

الناتج:

{'Python', 'CSS'}

جدول سريع لأهم أوامر Set

الأمر ماذا يفعل؟ مثال
add() إضافة عنصر واحد items.add("Python")
update() إضافة عدة عناصر items.update(["HTML", "CSS"])
remove() حذف عنصر، ويظهر خطأ إذا لم يكن موجودًا items.remove("HTML")
discard() حذف عنصر بدون خطأ إذا لم يكن موجودًا items.discard("HTML")
union() دمج مجموعتين بدون تكرار a.union(b)
intersection() العناصر المشتركة بين مجموعتين a.intersection(b)
difference() العناصر الموجودة في مجموعة وليست في الأخرى a.difference(b)
len() حساب عدد عناصر Set len(items)

أخطاء شائعة عند استخدام Set

1. محاولة الوصول إلى عنصر باستخدام index

هذا خطأ شائع عند المبتدئين؛ لأنهم يتعاملون مع Set وكأنها List.

items = {"a", "b", "c"}

print(items[0])

الصحيح: إذا احتجت الفهرسة، استخدم List:

items = ["a", "b", "c"]

print(items[0])

2. استخدام {} لإنشاء Set فارغة

هذا السطر لا ينشئ Set فارغة:

items = {}

بل ينشئ Dictionary فارغًا. الصحيح:

items = set()

3. توقع أن Set تحفظ ترتيب العناصر

إذا كان ترتيب العناصر مهمًا، لا تعتمد على Set. استخدم List لأنها تحفظ الترتيب وتدعم الفهرسة.

متى تستخدم Set في بايثون؟

استخدم Set عندما:

  • تريد إزالة العناصر المكررة من قائمة.
  • تريد معرفة العناصر المشتركة بين مجموعتين.
  • تريد معرفة العناصر المختلفة بين مجموعتين.
  • تريد فحص وجود عنصر بسرعة داخل مجموعة.
  • لا يهمك ترتيب العناصر.

متى لا تستخدم Set؟

لا تستخدم Set عندما:

  • تحتاج ترتيب العناصر كما أدخلتها.
  • تحتاج الوصول إلى عنصر باستخدام index.
  • تريد السماح بتكرار العناصر.
  • تريد تخزين بيانات لها مفاتيح وقيم، ففي هذه الحالة استخدم Dictionary.
{alertInfo} لو تحتاج ترتيب وفهرسة استخدم List، ولو تحتاج بيانات ثابتة استخدم Tuple، ولو تحتاج عناصر غير مكررة استخدم Set.

تدريب بسيط على Set

اكتب برنامجًا يحذف الأرقام المكررة من قائمة، ثم يطبع الأرقام بدون تكرار.

الحل:

numbers = [5, 10, 5, 20, 10, 30]

unique_numbers = set(numbers)

print(unique_numbers)

الناتج:

{5, 10, 20, 30}

أسئلة شائعة

ما هي Set في Python؟

هي نوع بيانات يستخدم لتخزين مجموعة عناصر غير مكررة. تفيد عندما تريد إزالة التكرار أو مقارنة مجموعتين من البيانات.

هل Set تقبل التكرار؟

لا، Set لا تسمح بتكرار العناصر. إذا أضفت نفس العنصر أكثر من مرة سيبقى مرة واحدة فقط.

هل Set تحفظ ترتيب العناصر؟

لا تعتمد على ترتيب Set. إذا كان الترتيب مهمًا استخدم List.

ما الفرق بين List و Set؟

List تحفظ الترتيب وتقبل التكرار وتدعم الفهرسة، أما Set فلا تقبل التكرار ولا تعتمد على الفهرسة.

كيف أنشئ Set فارغة؟

استخدم set() وليس {}، لأن {} تنشئ Dictionary فارغًا.

هل يمكن تحويل List إلى Set؟

نعم، يمكنك استخدام set(list_name) لتحويل قائمة إلى Set، وهذا مفيد لإزالة العناصر المكررة.

روابط مهمة من بايثون العرب

مصدر خارجي مفيد

الخلاصة

تعلمنا في هذا الدرس أن Set في Python تستخدم لتخزين عناصر غير مكررة، وأنها مفيدة جدًا عند إزالة التكرار أو مقارنة مجموعات من البيانات.

تعلمنا أيضًا طريقة إنشاء Set، وإضافة العناصر باستخدام add()، وحذفها باستخدام remove() و discard()، واستخدام دوال مهمة مثل union() و intersection() و difference().

إذا كنت تحتاج قائمة مرتبة وتدعم الفهرسة، استخدم List. وإذا كنت تحتاج بيانات ثابتة لا تتغير، استخدم Tuple. أما إذا كنت تحتاج عناصر غير مكررة أو تريد مقارنة مجموعات، فغالبًا Set هي الخيار المناسب.

{alertSuccess} القاعدة الذهبية: استخدم Set عندما تريد عناصر غير مكررة، واستخدم List عندما تحتاج ترتيبًا وفهرسة.

إرسال تعليق

أحدث أقدم