Распаковка последовательности




Вложенные последовательности

Раньше мы говорили, что списки и кортежи допускают элементы любого типа. Если это верно, то должны существовать такие списки/кортежи, которые состоят из других списков/кортежей. Они на самом деле есть - это так называемые вложенные последовательности. Вложенной называется последовательность, которая содержится внутри другой последовательности. Вложение – прекрасный способ организации сложных наборов данных. Сам термин пришел из математики и прижился в жаргоне программистов. Я готов утверждать, что вложенные последовательности уже знакомы вам из жизненного опыта. Пусть, например, перед праздником вы решили купить подарки родственникам и друзьям. Очевидно, вы выпишете на листке несколько имен и рядом с каждым перечислите возможные варианты подарка. Вот вы и создали вложенную последовательность: в списке имен за каждым именем стоит список подарков.

Знакомство с программой «Рекорды 2.0»

В нашей предыдущей программе Рекорды были доступны только сами рекордные счета. Но, как правило, в списках игровых достижений результат сопровождается именем игрока. Это реализовано в новой версии программы, которая улучшена и в другом: теперь список рекордов сортируется автоматически, а на экране отображаются только пять наивысших достижений.

Создаем вложенные последовательности

Список или вложенный кортеж можно создать обычным образом: набрать все элементы, разделить их запятыми и окружить скобками, квадратными или круглыми. Разница в том, что среди элементов будут вложенные последовательности- целые списки или кортежи. Вот пример:

>>>nested=["раз",("два","три"),["четыре","пять","шесть"]]

>>> print (nested)

['раз',('два','три'),['четыре',' пять','шесть']]

 

Здесь шесть строк, но список nested состоит всего из трех элементов. Первый из них - строка "раз", второй- кортеж ("два ", "три"), а третий- список ["четыре", "пять", "шесть"].

Можно создать список или кортеж, содержащий любое количество других списков или кортежей. Но на практике применяются лишь некоторые единообразные формы вложения. Обратите внимание на следующий пример:

>>> scores =[("Маша",1000),("Вася",1500),("Петя",3000)]>>> print (scores)[('Маша',1000),('Вася',1500),('Петя',3000)]

 

Список scores содержит три элемента. Каждый из его элементов - кортеж, который,в свою очередь, содержит два элемента: строку и число. Эта последовательностьпредставляет собой список рекордов с именами и результатами (как настоящий!).В данном случае известно, что Маша набрала 1000 очков, Вася - 1500, а рекордсменПетя достиг результата 3000.

ЛОВУШКА. Хотяможно создавать последовательности с большой глубиной вложения, обычно так не делают.Такие списки, как в следующем примере, считаются неудачными:

nested=("глубоко",("глубже". ("еще". "и еще глубже")))

 

Вложение провоцирует ошибки. Вот почему даже опытные программисты почти не пользуются последовательностямис глубиной вложенности больше двух. Для большинства ваших программ будет.

Доступ к вложенным элементам

К вложенной последовательности, как и ко всякой другой последовательности, применимо индексирование:

>>> scores =[("Маша",1000),("Вася",1500),("Петя",3000)]>>> print (scores[0])('Маша',1000)>>> print (scores[1])('Вася',1500)>>> print (scores[2])('Петя',3000)

 

Здесь каждый элемент - кортеж. Его мы и получаем, вызвав элемент с определенным индексом. Но что, если нам надо получить доступ к одному из элементов одного из кортежей? Один способ заключается в том, чтобы создать для этого кортежа переменную и извлечь из нее элемент по индексу, например, так:

>>>a_score=scores[2]>>> print (a_score)('Петя',3000)>>> print (a_score[0])Петя

 

Но извлечь строку "Петя" из списка scores можно и более прямым путем:

>>> print (scores[2][0])Петя

 

Два индекса в записи scores[2][0] говорят компьютеру, что мы хотим взять элемент списка scores в позиции номер 2 (это ("Петя", 3000)), а из него, в свою очередь, взять элемент в позиции номер 0 (это "Петя"). Множественную индексацию такого типа можно использовать в списках с вложением, чтобы напрямую обращаться к вложенным элементам.

Распаковка последовательности

Если известно, сколько элементов есть в последовательности, то можно создатьдля каждого из них особую переменную, не затратив больше одной строки кода:

>>> name, score =("ИванИванович",175)>>> print (name)Иван Иванович>>> print (score)175

 

Это так называемая распаковка - операция, которая применима к последовательностямлюбого вида. Помните, что надо подставить столько же самостоятельныхпеременных, сколько элементов в последовательности. Иначе интерпретаторсообщит об ошибке.

Настройка программы

Как и в первой версии программы Рекорды, назначим начальные значения переменныхи условие цикла whilе. Когда пользователь вводит 0, компьютер прощаетсяс ним.

# Рекорды 2.0# Демонстрирует вложенные последовательности scores=[]choice =None while choice!="0": print (""" Рекорды 2.0 0 - Выйти 1 - Показать рекорды 2 - Добавить рекорд""") choice =input("Baшвыбор: ") print () # выход if choice=="0": print ("До свидания.")

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-11-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: