English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا المقال، ستعلم كل شيء عن مجموعات بايثون; كيفية إنشائها، إضافة أو إزالة العناصر فيها، والعمليات التي يمكن تنفيذها على مجموعات في بايثون.
الجمع هو مجموعة غير منضوية من العناصر. كل عنصر فريد (لا يوجد عنصر مكرر) ويجب أن يكون غير قابل للتغيير (لا يمكن تعديله).
لكن الجمع نفسه قابل للتغيير. يمكننا إضافة أو إزالة العناصر منه.
يمكن استخدام الجمع لأداء عمليات حسابية على مجموعات، مثل الاتحاد، التداخل، الاختلاف المتناسب، إلخ.
بوضع جميع العناصر (العناصر) داخل الأقواس {} والمفصولة بالكومات أو باستخدام دالة مدمجة مثل set().
يمكن أن يكون لها عدد غير محدود من العناصر، ويمكن أن تكون هذه العناصر من أنواع مختلفة (الأعداد الصحيحة، الأعداد العشرية، المجموعات، النصوص، إلخ). ولكن لا يمكن للجمع أن يحتوي على عناصر قابلة للتغيير (مثلالقائمةأوالمعجمكعناصر.
# مجموعة من الأعداد الصحيحة my_set = {1, 2, 3} print(my_set) # مجموعة من أنواع البيانات المختلفة my_set = {1.0, "Hello", (1, 2, 3)} print(my_set)
أحاول أيضًا هذا المثال.
# مجموعة بدون تكرار # 输出: {1, 2, 3, 4} my_set = {1,2,3,4,3,2} print(my_set) # لا يمكن للجمع أن يحتوي على عناصر قابلة للتغيير # هنا [3،4] هو قائمة قابلة للتغيير # إذا قمت بتعطيل السطر 12، # هذا سيؤدي إلى خطأ. # TypeError: unhashable type: 'list' # my_set = {1, 2, [3, 4]} # يمكننا توليد مجموعة من القائمة # 输出: {1, 2, 3} my_set = set([1,2,3,2]) print(my_set)
إن إنشاء مجموعة فارغة له طابع خاص.
المقدار الفارغ {} سيسمح لك بإنشاء دليل فارغ في بايثون. من أجل إنشاء مجموعة لا تحتوي على أي عنصر، نستخدم دالة set() بدون أي معاملات.
# تحديد باستخدام {} a = {} # فحص نوع البيانات الخاصة بa # خروج: <class 'dict'> print(type(a)) # تحديد باستخدام set() a = set() # فحص نوع البيانات الخاصة بa # خروج: <class 'set'> print(type(a))
الجمع غير ثابت. ولكن نظرًا لأنها غير منضوية، فإن المؤشرات ليست لها معنى.
我们无法使用索引或切片来访问或更改集合的元素。集不支持它。
我们可以使用add()方法添加单个元素,使用update()方法添加多个元素。update()方法可以采用元组,列表,字符串或其他集合作为其参数。在所有情况下,都避免重复。
# تعيين my_set my_set = {1,3} print(my_set) # 如果取消注释第9行, # 你会得到一个错误 # TypeError: 'set' object does not support indexing #my_set[0] # 增加一个元素 # 输出: {1, 2, 3} my_set.add(2) print(my_set) # 增加多个元素 # 输出: {1, 2, 3, 4} my_set.update([2,3,4]) print(my_set) # 增加 list 和set # 输出: {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()在这种情况下会引发错误。
以下示例将说明这一点。
# تعيين my_set my_set = {1, 3, 4, 5, 6} print(my_set) # 抛弃一个元素 # 输出: {1, 3, 5, 6} my_set.discard(4) print(my_set) # 移除已个元素 # 输出: {1, 3, 5} my_set.remove(6) print(my_set) # 抛弃一个元素 # 没有出现在 my_set # 输出: {1, 3, 5} my_set.discard(2) print(my_set) # remove一个元素 # 没有出现在 my_set # 如果没有注释#my_set.remove(2), # 会抛出一个错误. # 输出: KeyError: 2 #my_set.remove(2)
同样,我们可以使用pop()方法删除并返回一个项目。
集合为无序,无法确定将弹出哪个项目。这是完全任意的。
我们可以使用clear()方法删除集合中的所有项目。
# تعيين my_set # 输出: 唯一元素集 my_set = set("HelloWorld") print(my_set) # pop出一个元素 # Output: عنصر عشوائي print(my_set.pop()) # pop أي عنصر # Output: عنصر عشوائي my_set.pop() print(my_set) # إزالة my_set # Output: set() my_set.clear() print(my_set)
يمكن استخدام المجموعات للقيام بعمليات الرياضيات على المجموعات، مثل الاتحاد، التقاء، الاختلاف والاختلاف المتناسب. يمكن تنفيذ ذلك عبر عمودي أو دوال.
دعنا نفكر في مجموعتين用于 التالي.
>>> A = {1، 2، 3، 4، 5} >>> B = {4، 5، 6، 7، 8}
الاتحاد بين A و B هو مجموعة جميع العناصر التي تأتي من كلا المجموعتين.
الاتحاد يتم تنفيذه باستخدام عمودي|. يمكن تنفيذ نفس العملية باستخدام دالة union().
# تعيين A و B A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} # استخدام عمودي | # Output: {1، 2، 3، 4، 5، 6، 7، 8} print(A | B)
تجربة الأمثلة التالية في شل Python.
# استخدام دالة الاتحاد >>> A.union(B) {1، 2، 3، 4، 5، 6، 7، 8} # استخدام دالة الاتحاد في B >>> B.union(A) {1، 2، 3، 4، 5، 6، 7، 8}
مجموعة Aومجموعة Bالتقاء هو مجموعة العناصر المشتركة في كلا المجموعتين.
التقاء يتم تنفيذه باستخدام عمودي &. يمكن تنفيذ نفس العملية باستخدام دالة intersection().
# تعيين A و B A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} # استخدام عمودي & # Output: {4، 5} print(A & B)
تجربة الأمثلة التالية في شل Python.
# استخدام دالة التقاء في A >>> A.intersection(B) {4، 5} # استخدام دالة التقاء في B >>> B.intersection(A) {4، 5}
الاختلاف بين A و B (A-B) هو مجموعة العناصر موجودة في A فقط وليس في B. وبالمثل، B-A هي مجموعة العناصر موجودة في B وليس في A.
الاختلاف يتم تنفيذه باستخدام عمودي -. يمكن تنفيذ نفس العملية باستخدام دالة difference().
# تعيين A و B A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} # استخدام عمودي - في A # Output: {1، 2، 3} print(A - B)
تجربة الأمثلة التالية في شل Python.
# استخدام دالة الاختلاف في A >>> A.difference(B) {1، 2، 3} # استخدام عمودي - في B >>> B - A {8، 6، 7} # استخدام دالة الاختلاف في B >>> B.difference(A) {8، 6، 7}
الاختلاف المتناسب بين A و B هو مجموعة العناصر في A و B، لكن العناصر متطابقة في كلاهما.
استخدام عمودي ^ لتنفيذ الاختلاف المتناسب. يمكن تنفيذ نفس العملية باستخدام دالة symmetric_difference().
# تعيين A و B A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} # باستخدام عمودية ^ # الناتج: {1, 2, 3, 6, 7, 8} print(A ^ B)
تجربة الأمثلة التالية في شل Python.
# استخدام دالة symmetric_difference على A >>> A.symmetric_difference(B) {1, 2, 3, 6, 7, 8} # استخدام دالة symmetric_difference على B >>> B.symmetric_difference(A) {1, 2, 3, 6, 7, 8}
هناك العديد من طرق مجموعة Python، تم استخدام بعضها بالفعل. هذه هي قائمة بجميع الطرق المتاحة للمجموعة Set.
الطريقة | وصف |
---|---|
add() | إضافة العنصر إلى المجموعة |
clear() | إزالة جميع العناصر من المجموعة |
copy() | إرجاع نسخة من المجموعة |
difference() | إرجاع الفرق بين مجموعتين أو أكثر كمجموعة جديدة |
difference_update() | إزالة جميع العناصر من المجموعة الأخرى |
discard() | إزالة العنصر إذا كان عضواً. إذا لم يكن العنصر في المجموعة، لا يتم تنفيذ أي عملية |
intersection() | إرجاع التكامل بين المجموعتين كمجموعة جديدة |
intersection_update() | تحديث المجموعة باستخدام التكامل مع نفسها وأخرى |
isdisjoint() | إرجاع True إذا كانت نقطة التقاء المجموعتين فارغة |
issubset() | إرجاع True إذا كانت المجموعة الأخرى تحتوي على هذه المجموعة |
issuperset() | إرجاع True إذا كانت المجموعة تحتوي على المجموعة الأخرى |
pop() | إزالة وإرجاع عنصر عشوائي من المجموعة. يُرفع خطأ KeyError إذا كانت المجموعة فارغة |
remove() | إزالة عنصر واحد من المجموعة. إذا لم يكن العنصر عضواً، يُطلق خطأ KeyError |
symmetric_difference() | إرجاع الاختلاف المتناظر بين المجموعتين كمجموعة جديدة |
symmetric_difference_update() | تحديث مجموعة واحدة باستخدام الاختلاف المتناظر مع نفسها وأخرى |
union() | إرجاع التكامل بين المجموعتين كمجموعة جديدة |
update() | تحديث المجموعة باستخدام التكامل مع نفسها وأخرى |
يمكننا استخدام كلمة المفتاح in لاختبار وجود العنصر في المجموعة.
# تعيين my_set my_set = set("apple") # التحقق من وجود 'a' # خروج: True print('a' in my_set) # التحقق من وجود 'p' # خروج: False print('p' not in my_set)
يمكننا استخدام الدائرة للمرور على كل عنصر في الجمعية.
>>> for letter in set("apple"): ... print(letter) ... a p e l
الوظائف المدمجة مثل all()،any()،enumerate()،len()،max()،min()،sort()،sum() تستخدم غالبًا مع الجمعيات للتنفيذ المختلفة.
وظيفة | وصف |
---|---|
all() | إذا كانت جميع العناصر في الجمعية صحيحة (أو كانت الجمعية فارغة)، يعود بـ True. |
any() | إذا كان أي عنصر في الجمعية صحيحًا، يعود بـ True. إذا كانت الجمعية فارغة، يعود بـ False. |
enumerate() | يعود بجدول مرتب يحتوي على جميع الأنماط من جميع العناصر. |
len() | يعود بالطول (عدد العناصر) في الجمعية. |
max() | يعود بالعنصر الأكبر في الجمعية. |
min() | يعود بالعنصر الأصغر في الجمعية. |
sorted() | يعود بجدول مرتب جديد من العناصر في الجمعية (لا يغير الجمعية نفسها). |
sum() | يعود بجمع جميع العناصر في الجمعية. |
Frozenset هو فئة جديدة تحتوي على خصائص الجمعيات، ولكن لا يمكن تغيير عناصرها بعد تخصيصها. العناصر غير القابلة للتغيير هي قوائم غير قابلة للتغيير، بينما الجمعيات المجمدة هي جمعيات غير قابلة للتغيير.
الجمعيات القابلة للتغيير غير القابلة للتشكيل، لذلك لا يمكن استخدامها كأصابع دليل. من ناحية أخرى، frozenset قابلة للتشكيل، يمكن استخدامها كأصابع دليل.
يمكن استخدام الدالةFrozenset()إنشاءFrozensets.
يتم دعم هذه الطريقة للنوع البياني، مثل copy()،difference()،intersection()،isdisjoint()،issubset()،issuperset()،symmetric_difference() وunion()، بسبب كونه غير قابل للتغيير، لا يوجد طريقة لإضافة أو حذف العناصر.
# تعيين A و B A = frozenset([1, 2, 3, 4]) B = frozenset([3, 4, 5, 6])
تجربة هذه الأمثلة في بيئة Python shell.
>>> 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'