القائمة الرئيسية

الصفحات

دورة البرمجة بلغة بايثون - الدرس السابع والعشرون (المجموعات Sets)

دورة البرمجة بلغة بايثون - الدرس السابع والعشرون (المجموعات Sets)

دورة البرمجة بلغة بايثون - الدرس السابع والعشرون (المجموعات Sets)

في هذا البرنامج التعليمي ، ستتعلم كل شيء عن مجموعات بايثون ؛ كيف يتم إنشاؤها ، إضافة أو إزالة العناصر منها ، وجميع العمليات التي يتم إجراؤها على مجموعات Sets في Python.


المجموعة Set هي مجموعة غير مرتبة من العناصر. كل عنصر مجموعة فريد (لا مكرر) ويجب أن يكون غير قابل للتغيير (لا يمكن تغييره).


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


يمكن أيضًا استخدام المجموعات لإجراء عمليات مجموعة رياضية مثل الاتحاد والتقاطع والاختلاف المتماثل ، إلخ.


إنشاء مجموعات بايثون

يتم إنشاء مجموعة عن طريق وضع جميع العناصرداخل أقواس معقوفة {} ، مفصولة بفاصلة ، أو باستخدام الوظيفة المدمجة ()Set.


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

# Different types of sets in Python
# set of integers
my_set = {1, 2, 3}
print(my_set)

# set of mixed datatypes
my_set = {1.0, "Hello", (1, 2, 3)}
print(my_set)

الناتج

{1, 2, 3}
{1.0, (1, 2, 3), 'Hello'}

جرب الأمثلة التالية أيضًا.

# set cannot have duplicates
# Output: {1, 2, 3, 4}
my_set = {1, 2, 3, 4, 3, 2}
print(my_set)

# we can make set from a list
# Output: {1, 2, 3}
my_set = set([1, 2, 3, 2])
print(my_set)

# set cannot have mutable items
# here [3, 4] is a mutable list
# this will cause an error.

my_set = {1, 2, [3, 4]}

الناتج

{1, 2, 3, 4}
{1, 2, 3}
Traceback (most recent call last):
  File "<string>", line 15, in <module>
    my_set = {1, 2, [3, 4]}
TypeError: unhashable type: 'list'


يعد إنشاء مجموعة فارغة أمرًا صعبًا بعض الشيء.


ستعمل الأقواس المتعرجة الفارغة {} على إنشاء قاموس فارغ في بايثون. لإنشاء مجموعة بدون أي عناصر ، نستخدم الدالة ()set بدون أي باراميتر.

# Distinguish set and dictionary while creating empty set

# initialize a with {}
a = {}

# check data type of a
print(type(a))

# initialize a with set()
a = set()

# check data type of a
print(type(a))

الناتج

<class 'dict'>
<class 'set'>

تعديل المجموعة في بايثون

المجموعات قابلة للتغيير. ومع ذلك ، نظرًا لأنها غير مرتبة ، فليس للفهرسة أي معنى.


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


يمكننا إضافة عنصر واحد باستخدام طريقة ()add ، وعناصر متعددة باستخدام طريقة ()update. يمكن أن تأخذ طريقة ()update مجموعات أو قوائم أو سلاسل أو مجموعات أخرى كوسيطة لها. في جميع الحالات ، يتم تجنب التكرارات.

# initialize my_set
my_set = {1, 3}
print(my_set)

# if you uncomment line 9,
# you will get an error
# TypeError: 'set' object does not support indexing

# my_set[0]

# add an element
# Output: {1, 2, 3}
my_set.add(2)
print(my_set)

# add multiple elements
# Output: {1, 2, 3, 4}
my_set.update([2, 3, 4])
print(my_set)

# add list and set
# Output: {1, 2, 3, 4, 5, 6, 8}
my_set.update([4, 5], {1, 6, 8})
print(my_set)

الناتج

{1, 3}
{1, 2, 3}
{1, 2, 3, 4}
{1, 2, 3, 4, 5, 6, 8}

إزالة العناصر من مجموعة

يمكن إزالة عنصر معين من مجموعة باستخدام طرق ()discard و()remove.


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


المثال التالي سوف يوضح هذا.

# Difference between discard() and remove()

# initialize my_set
my_set = {1, 3, 4, 5, 6}
print(my_set)

# discard an element
# Output: {1, 3, 5, 6}
my_set.discard(4)
print(my_set)

# remove an element
# Output: {1, 3, 5}
my_set.remove(6)
print(my_set)

# discard an element
# not present in my_set
# Output: {1, 3, 5}
my_set.discard(2)
print(my_set)

# remove an element
# not present in my_set
# you will get an error.
# Output: KeyError

my_set.remove(2)

الناتج

{1, 3, 4, 5, 6}
{1, 3, 5, 6}
{1, 3, 5}
{1, 3, 5}
Traceback (most recent call last):
  File "<string>", line 28, in <module>
KeyError: 2

وبالمثل ، يمكننا إزالة عنصر وإرجاعه باستخدام دالة ()pop.


نظرًا لأن المجموعة هي نوع بيانات غير مرتب ، فلا توجد طريقة لتحديد العنصر الذي سيتم ظهوره. إنه تعسفي تمامًا.


يمكننا أيضًا إزالة جميع العناصر من مجموعة باستخدام دالة ()clear.

# initialize my_set
# Output: set of unique elements
my_set = set("HelloWorld")
print(my_set)

# pop an element
# Output: random element
print(my_set.pop())

# pop another element
my_set.pop()
print(my_set)

# clear my_set
# Output: set()
my_set.clear()
print(my_set)

print(my_set)

الناتج

{'H', 'l', 'r', 'W', 'o', 'd', 'e'}
H
{'r', 'W', 'o', 'd', 'e'}
set()

دوال المجموعة في بايثون

يمكن استخدام المجموعات لإجراء عمليات مجموعة رياضية مثل الاتحاد والتقاطع والاختلاف والفرق المتماثل. يمكننا القيام بذلك مع المشغلين أو الأساليب.


دعونا ننظر في المجموعتين التاليتين للعمليات التالية.

>>> A = {1, 2, 3, 4, 5}
>>> B = {4, 5, 6, 7, 8}

مجموعة الاتحاد

تعيين الاتحاد في بايثون


اتحاد A و B عبارة عن مجموعة من العناصر من كلتا المجموعتين.


يتم إجراء الاتحاد باستخدام العامل | . يمكن تحقيق نفس الشيء باستخدام طريقة ()union.

# Set union method
# initialize A and B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

# use | operator
# Output: {1, 2, 3, 4, 5, 6, 7, 8}
print(A | B)

الناتج

{1, 2, 3, 4, 5, 6, 7, 8}

جرب الأمثلة التالية على بايثون.

# use union function
>>> A.union(B)
{1, 2, 3, 4, 5, 6, 7, 8}

# use union function on B
>>> B.union(A)
{1, 2, 3, 4, 5, 6, 7, 8}

تعيين التقاطع في بايثون

تعيين التقاطع في بايثون


تقاطع A و B هو مجموعة من العناصر المشتركة في كلتا المجموعتين.


يتم تنفيذ التقاطع باستخدام عامل التشغيل &. يمكن تحقيق نفس الشيء باستخدام طريقة ()intersection.

# Intersection of sets
# initialize A and B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

# use & operator
# Output: {4, 5}
print(A & B)

الناتج

{4, 5}

جرب الأمثلة التالية على بايثون.

# use intersection function on A
>>> A.intersection(B)
{4, 5}

# use intersection function on B
>>> B.intersection(A)
{4, 5}


مجموعات الفروقات

اضبط الفرق في بايثون


اختلاف المجموعة B عن المجموعة A (A - B) هو مجموعة من العناصر الموجودة فقط في A ولكن ليس في B. وبالمثل ، B - A هي مجموعة من العناصر في B ولكن ليس في A.


يتم تنفيذ الفرق باستخدام - عامل التشغيل. يمكن تحقيق نفس الشيء باستخدام طريقة ()difference.

# Difference of two sets
# initialize A and B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

# use - operator on A
# Output: {1, 2, 3}
print(A - B)


الناتج

{1, 2, 3}

جرب الأمثلة التالية على شيل البايثون.

# use difference function on A
>>> A.difference(B)
{1, 2, 3}

# use - operator on B
>>> B - A
{8, 6, 7}

# use difference function on B
>>> B.difference(A)
{8, 6, 7}


ضبط الاختلاف المتماثل

اضبط الاختلاف المتماثل في بايثون


الفرق المتماثل لـ A و B هو مجموعة من العناصر في A و B ولكن ليس في كليهما (باستثناء التقاطع).


يتم إجراء الفرق المتماثل باستخدام عامل التشغيل ^. يمكن تحقيق نفس الشيء باستخدام طريقة ()symmetric_difference.

# Symmetric difference of two sets
# initialize A and B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

# use ^ operator
# Output: {1, 2, 3, 6, 7, 8}
print(A ^ B)


الناتج

{1, 2, 3, 6, 7, 8}


جرب الأمثلة التالية على شيل البايثون.

# use symmetric_difference function on A
>>> A.symmetric_difference(B)
{1, 2, 3, 6, 7, 8}

# use symmetric_difference function on B
>>> B.symmetric_difference(A)
{1, 2, 3, 6, 7, 8}

دوال المجموعة الاخرى في بايثون

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

MethodDescription
add()Adds an element to the set
clear()Removes all elements from the set
copy()Returns a copy of the set
difference()Returns the difference of two or more sets as a new set
difference_update()Removes all elements of another set from this set
discard()Removes an element from the set if it is a member. (Do nothing if the element is not in set)
intersection()Returns the intersection of two sets as a new set
intersection_update()Updates the set with the intersection of itself and another
isdisjoint()Returns True if two sets have a null intersection
issubset()Returns True if another set contains this set
issuperset()Returns True if this set contains another set
pop()Removes and returns an arbitrary set element. Raises KeyError if the set is empty
remove()Removes an element from the set. If the element is not a member, raises a KeyError
symmetric_difference()Returns the symmetric difference of two sets as a new set
symmetric_difference_update()Updates a set with the symmetric difference of itself and another
union()Returns the union of sets in a new set
update()Updates the set with the union of itself and others


عمليات أخرى

  • تعيين اختبار العضوية

يمكننا اختبار ما إذا كان العنصر موجودًا في مجموعة أم لا ، باستخدام الكلمة الرئيسية in.

# in keyword in a set
# initialize my_set
my_set = set("apple")

# check if 'a' is present
# Output: True
print('a' in my_set)

# check if 'p' is present
# Output: False
print('p' not in my_set)


الناتج

True
False

  • التكرار من خلال مجموعة

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

>>> for letter in set("apple"):
...     print(letter)
...    
a
p
e 


  • وظائف مدمجة مع مجموعة

تُستخدم الدوال المضمنة مثل all ، any ، enumerate ، len  ، max  ، min  ، Sorted ، sum وما إلى ذلك بشكل شائع مع مجموعات لأداء مهام مختلفة.


FunctionDescription
all()Returns True if all elements of the set are true (or if the set is empty).
any()Returns True if any element of the set is true. If the set is empty, returns False.
enumerate()Returns an enumerate object. It contains the index and value for all the items of the set as a pair.
len()Returns the length (the number of items) in the set.
max()Returns the largest item in the set.
min()Returns the smallest item in the set.
sorted()Returns a new sorted list from elements in the set(does not sort the set itself).
sum()Returns the sum of all elements in the set.


بيثون Frozenset

Frozenset هي فئة جديدة لها خصائص مجموعة ، ولكن لا يمكن تغيير عناصرها بمجرد تعيينها. في حين أن المجموعات هي قوائم ثابتة ، فإن مجموعات التجميد هي مجموعات غير قابلة للتغيير.


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


يمكن إنشاء مجموعات Frozensets باستخدام وظيفة ()frozenset.


يدعم نوع البيانات هذا طرقًا مثل copy ، difference ، intersection ، و isdisjoint  ، و issubset ، و issuperset  و symmetric_difference و union. كونها غير قابلة للتغيير ، لا تحتوي على طرق تضيف أو تزيل العناصر.

# Frozensets
# initialize A and B
A = frozenset([1, 2, 3, 4])
B = frozenset([3, 4, 5, 6])

جرب هذه الأمثلة على شيل البايثون.

>>> A.isdisjoint(B)
False
>>> A.difference(B)
frozenset({1, 2})
>>> A | B
frozenset({1, 2, 3, 4, 5, 6})
>>> A.add(3)
...
AttributeError: 'frozenset' object has no attribute 'add'
reaction:
Ahmed Taher
Ahmed Taher
مدون من العراق . احب البرمجة وكل ما يتعلق بالشبكات والسيرفرات وامن المعلومات . واسعى الى توفير جميع المصادر والمواد للامتحانات الدولية.

تعليقات