Зарегистрируйтесь, чтобы продолжить обучение

Вложенные списки Python: Списки

Значением списка может быть все что угодно, в том числе другой список. Создать список в списке можно так:

nested1 = [[3]]
print(len(nested1))  # => 1

nested2 = [1, [3, 2], [3, [4]]]
print(len(nested2))  # => 3

Каждый элемент, являющийся списком, рассматривается как единое целое. Это видно по размеру второго списка. Синтаксис Python позволяет размещать элементы создаваемого списка построчно. Перепишем для наглядности создание второго списка:

data2 = [
    1,  # первый элемент (число)
    [3, 2],  # второй элемент (список)
    [3, [4]],  # третий элемент (список)
]
len(data2)  # 3

Вложенность никак не ограничивается. Можно создавать список списков со списками внутри и так далее.

Обращение ко вложенным спискам выглядит немного необычно, хотя и логично:

data1 = [[3]]
data1[0][0]  # 3

data2 = [1, [3, 2], [3, [4]]]
data2[2][1][0]  # 4

Возможно, с непривычки вы не всегда сразу точно увидите, как добраться до нужного элемента, но это всего лишь вопрос тренировок:

data2 = [
    1,
    [3, 2],
    [3, [4]],
]

data2[2]  # [3, [4]]
data2[2][1]  # [4]
data2[2][1][0]  # 4

Изменение и добавление списков в список:

data1 = [[3]]
data1[0] = [2, 10]
data1.append([3, 4, 5])

# [[2, 10], [3, 4, 5]]

Вложенные списки можно изменять напрямую, просто обратившись к нужному элементу:

data1 = [[3]]
data1[0][0] = 5
# [[5]]

То же самое касается и добавления нового элемента:

data1 = [[3]]
data1[0].append(10)
# [[3, 10]]

Для чего же могут понадобиться вложенные списки? Таких примеров довольно много: начиная от математических концепций, например, матриц, заканчивая представлением игровых полей. Помните игру крестики-нолики? Это как раз тот самый случай.

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

# Инициализируем поле
field = [
    [None, None, None],
    [None, None, None],
    [None, None, None],
]

# Делаем ход:
field[1][2] = "x"
# [
#     [None, None, None],
#     [None, None, 'x'],
#     [None, None, None],
# ]

Теперь реализуем функцию, которая выполняет проверку:

def has_player_move(field, symbol):
    # Обходим поле. Каждый элемент — это строчка в игровом поле.
    for row in field:
        # оператор in проверяет присутствует ли элемент в списке,
        if symbol in row:  # Если присутствует, значит мы нашли то, что искали.
            return True
    # Если поле было просмотрено, но ничего не нашли,
    # значит ходов не было.
    return False

Проверим:

has_player_move(field, "x")  # True
has_player_move(field, "o")  # False

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 24 апреля
профессия
от 24 542 ₸ в месяц
новый
Сбор, анализ и интерпретация данных
9 месяцев
с нуля
Старт 24 апреля
профессия
новый
Автоматизированное тестирование веб-приложений на Python
8 месяцев
с нуля
Старт 24 апреля
профессия
новый
Программирование на JavaScript и Python, разработка веб-приложений и сервисов используя Django, проектирование REST API и работа с базами данных
16 месяцев
с нуля
Старт 24 апреля

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»