Python-да кортеждер мен тізімдерді орамнан шығарыңыз (кеңейтіңіз және бірнеше айнымалыларға тағайындаңыз).

Іскерлік

Python тілінде кортеж немесе тізім элементтерін кеңейтуге және бірнеше айнымалыларға тағайындауға болады. Бұл ретті орамды ашу немесе орамнан шығарылған тапсырма деп аталады.

Мұнда келесі мәліметтер сипатталған.

  • Кортеждер мен тізімдердің негіздерін ашу
  • Кірістірілген кортеждер, қаптамадан шығарылған тізімдер
  • Астыңғы сызу арқылы қаптаманы ашу:_
  • Жұлдызшалармен қаптамадан шығару:*

Кортеждерді, тізімдерді және сөздіктерді функция аргументтері ретінде кеңейту және беру үшін жұлдызшаларды пайдалану туралы ақпаратты келесі мақаланы қараңыз.

Кортеждер мен тізімдердің негіздерін ашу

Айнымалылар үтірмен бөлінген сол жақта жазылғанда, әрбір айнымалыға кортеждің немесе тізімнің элементі оң жағында тағайындалады. Бұл кортеждер үшін де, тізімдер үшін де бірдей (келесі мысалдар кортеж түрінде жазылған).

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

_астын сызу_ арқылы шығарылған.

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

Тек бір жұлдызша қосуға болады. Жұлдызшамен белгіленген бірнеше айнымалы болса, әрбір айнымалыға қанша элемент тағайындалғанын анықтау мүмкін емес болғандықтан, Синтаксистік қате қатесі пайда болады.

# *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