فك حزم (توسيع وتعيين لمتغيرات متعددة) المجموعات والقوائم في بايثون

اعمال

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

التفاصيل التالية موصوفة هنا.

  • تفريغ أساسيات المجموعات والقوائم
  • مجموعات متداخلة ، قوائم غير معبأة
  • التفريغ مع الخطوط السفلية:_
  • التفريغ بعلامات النجمة:*

راجع المقالة التالية للحصول على معلومات حول استخدام العلامات النجمية لتوسيع وتمرير المجموعات والقوائم والقواميس كوسائط دالة.

تفريغ أساسيات المجموعات والقوائم

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

t = (0, 1, 2)

a, b, c = t

print(a)
print(b)
print(c)
# 0
# 1
# 2

l = [0, 1, 2]

a, b, c = l

print(a)
print(b)
print(c)
# 0
# 1
# 2

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

a, b = 0, 1

print(a)
print(b)
# 0
# 1

إذا كان عدد المتغيرات لا يتطابق مع عدد العناصر ، يحدث خطأ.

# a, b = t
# ValueError: too many values to unpack (expected 2)

# a, b, c, d = t
# ValueError: not enough values to unpack (expected 4, got 3)

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

مجموعات متداخلة ، قوائم غير معبأة

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

  • ()
  • []
t = (0, 1, (2, 3, 4))

a, b, c = t

print(a)
print(b)
print(c)
# 0
# 1
# (2, 3, 4)

print(type(c))
# <class 'tuple'>

a, b, (c, d, e) = t

print(a)
print(b)
print(c)
print(d)
print(e)
# 0
# 1
# 2
# 3
# 4

تفريغ مع _underscore_.

في Python ، ليس فقط غير مفكك ، يتم تعيين القيم غير المطلوبة تقليديًا إلى الشرطة السفلية (شرطة سفلية) _. لا يوجد معنى نحوي خاص ؛ يتم تخصيصها ببساطة لمتغير يسمى _.

t = (0, 1, 2)

a, b, _ = t

print(a)
print(b)
print(_)
# 0
# 1
# 2

التفريغ بعلامات النجمة

إذا كان عدد المتغيرات أقل من عدد العناصر ، فستؤدي العلامة النجمية في اسم المتغير إلى تعيين العناصر معًا كقائمة.

تم تنفيذ بناء الجملة هذا منذ Python 3 وهو غير متوفر في Python 2.

يتم تعيين العناصر من البداية والنهاية إلى المتغيرات بدون علامات النجمة ، ويتم تعيين العناصر المتبقية كقائمة للمتغيرات ذات العلامات النجمية.

t = (0, 1, 2, 3, 4)

a, b, *c = t

print(a)
print(b)
print(c)
# 0
# 1
# [2, 3, 4]

print(type(c))
# <class 'list'>

a, *b, c = t

print(a)
print(b)
print(c)
# 0
# [1, 2, 3]
# 4

*a, b, c = t

print(a)
print(b)
print(c)
# [0, 1, 2]
# 3
# 4

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

a, b, *_ = t

print(a)
print(b)
print(_)
# 0
# 1
# [2, 3, 4]

يمكن أيضًا كتابة نفس الشيء على النحو التالي

a, b = t[0], t[1]

print(a)
print(b)
# 0
# 1

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

# *a, b, *c = t
# SyntaxError: two starred expressions in assignment

لاحظ أنه حتى عنصر واحد مخصص لمتغير مميز بعلامة النجمة يتم تعيينه كقائمة.

t = (0, 1, 2)

a, b, *c = t

print(a)
print(b)
print(c)
# 0
# 1
# [2]

print(type(c))
# <class 'list'>

في حالة عدم وجود عناصر إضافية ، يتم تعيين قائمة فارغة.

a, b, c, *d = t

print(a)
print(b)
print(c)
print(d)
# 0
# 1
# 2
# []