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

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

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

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

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

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

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

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

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

arr1 = [[3]]
arr1[0][0] # 3

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

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

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

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

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

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

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

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

arr1 = [[3]]
arr1[0][0] = 5
# [[5]]

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

arr1 = [[3]]
arr1[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
Рекомендуемые программы
профессия
Программирование на Python, Разработка веб-приложений и сервисов используя Django, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
новый
Google таблицы, SQL, Python, Superset, Tableau, Pandas, визуализация данных, Anaconda, Jupyter Notebook, A/B-тесты, ROI
9 месяцев
с нуля
Старт 26 декабря

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

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

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

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

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу