تاپل ها و لیست ها را در پایتون باز کنید (بسط دهید و به چندین متغیر اختصاص دهید).

کسب و کار

در پایتون، عناصر یک تاپل یا لیست را می توان گسترش داد و به چندین متغیر اختصاص داد. به این کار بازکردن توالی یا انتساب بدون بسته‌بندی گفته می‌شود.

جزئیات زیر در اینجا شرح داده شده است.

  • باز کردن اصول اولیه تاپل ها و لیست ها
  • تاپل های تو در تو، فهرست های بسته بندی نشده
  • باز کردن بسته بندی با Underscores:_
  • باز کردن بسته بندی با ستاره:*

برای اطلاعات در مورد استفاده از ستاره برای گسترش و ارسال تاپل ها، لیست ها و دیکشنری ها به عنوان آرگومان های تابع، مقاله زیر را ببینید.

باز کردن اصول اولیه تاپل ها و لیست ها

هنگامی که متغیرها در سمت چپ نوشته می شوند و با کاما از هم جدا می شوند، به هر متغیر یک عنصر از تاپل یا لیست در سمت راست اختصاص داده می شود. هم برای تاپل ها و هم برای لیست ها یکسان است (مثال های زیر به صورت تاپلی نوشته شده اند).

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_ باز شده است.

در پایتون، نه تنها بدون بسته بندی، مقادیری که مورد نیاز نیستند نیز به طور معمول به زیرخط (زیر خط) _ اختصاص داده می شوند. معنای دستوری خاصی وجود ندارد; آنها به سادگی به متغیری به نام _ اختصاص داده می شوند.

t = (0, 1, 2)

a, b, _ = t

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

باز کردن بسته بندی با ستاره

اگر تعداد متغیرها کمتر از تعداد عناصر باشد، یک ستاره در نام متغیر باعث می شود که عناصر به عنوان یک لیست با هم تخصیص داده شوند.

این نحو از پایتون 3 پیاده سازی شده است و در پایتون 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
# []
Copied title and URL