Следующая тема: БРу. Условный оператор
Вернуться в раздел: Базовый Python
Вернуться в оглавление: Я.Практикум
5. Вложенные списки.
5.1 Введение.
5.2 Список списков.
5.3 Циклы по вложенным спискам.
Задание №1
Выведите на экран столбец с жанрами фильмов таблицы movies_table. Каждое значение выводите на новой строке.
movies_table = [
['Побег из Шоушенка', 'США', 1994, 'драма', 142, 9.111],
['Крёстный отец', 'США', 1972, 'драма, криминал', 175, 8.730],
['Тёмный рыцарь', 'США', 2008, 'фантастика, боевик, триллер', 152, 8.499],
['Список Шиндлера', 'США', 1993, 'драма', 195, 8.818],
['Властелин колец: Возвращение Короля', 'Новая Зеландия', 2003, 'фэнтези, приключения, драма', 201, 8.625],
['Криминальное чтиво', 'США', 1994, 'триллер, комедия, криминал', 154, 8.619],
['Хороший, плохой, злой', 'Италия', 1966, 'вестерн', 178, 8.521],
['Бойцовский клуб', 'США', 1999, 'триллер, драма, криминал', 139, 8.644],
['Харакири', 'Япония', 1962, 'драма, боевик, история', 133, 8.106],
['Сталкер', 'СССР', 1979, 'фантастика, драма, детектив', 163, 8.083],
['Иди и смотри', 'СССР', 1985, 'драма, военный', 136, 8.094]
]
for row in movies_table: # напишите ваш код здесь
print (row[3])
Задание №2
Выведите на экран столбец с годом релиза из таблицы movies_table. Каждое значение выводите на новой строке.
movies_table = [
['Побег из Шоушенка', 'США', 1994, 'драма', 142, 9.111],
['Крёстный отец', 'США', 1972, 'драма, криминал', 175, 8.730],
['Тёмный рыцарь', 'США', 2008, 'фантастика, боевик, триллер', 152, 8.499],
['Список Шиндлера', 'США', 1993, 'драма', 195, 8.818],
['Властелин колец: Возвращение Короля', 'Новая Зеландия', 2003, 'фэнтези, приключения, драма', 201, 8.625],
['Криминальное чтиво', 'США', 1994, 'триллер, комедия, криминал', 154, 8.619],
['Хороший, плохой, злой', 'Италия', 1966, 'вестерн', 178, 8.521],
['Бойцовский клуб', 'США', 1999, 'триллер, драма, криминал', 139, 8.644],
['Харакири', 'Япония', 1962, 'драма, боевик, история', 133, 8.106],
['Сталкер', 'СССР', 1979, 'фантастика, драма, детектив', 163, 8.083],
['Иди и смотри', 'СССР', 1985, 'драма, военный', 136, 8.094]
]
for i in movies_table:
print(i[2]) # напишите ваш код здесь
5.4 Циклы по вложенным циклам. Продолжение.
Задание №1
Список списков field описывает игровое поле в «Крестиках-ноликах». Каждый его элемент — список из крестиков и ноликов, расположенных в одной строке. Выведите на экран список списков с помощью вложенных циклов for: каждый элемент общего списка выводите на новой строке; элементы подсписка отделяйте друг от друга одним пробелом. В вашем коде не должно быть квадратных скобок.
field = [['X', 'X', 'O'], ['O', 'X', 'O'], ['O', 'X', 'X']]
# напишите ваш код здесь
for row in field:
for col in row:
print (col, end=' ')
print()
5.5 Сумма значений в колонке.
Задание №1
В списке списков sales_info хранится число продаж пяти филиалов компании. С помощью цикла посчитайте сумму продаж всех филиалов. Результат сохраните в переменную total. Тогда функция print() выведет его на экран.
# [название филиала, количество продаж]
sales_info = [
['центральный', 12210],
['западный', 7612],
['восточный', 8110],
['южный', 5720],
['северный', 9798]
]
total = 0 # присвойте начальное значение
# напишите ваш код здесь
for sales in sales_info:
total += sales[1]
print(total)
Задание №2
В списке списков movies_table найдите сумму всех значений рейтинга.
movies_table = [
['Побег из Шоушенка', 'США', 1994, 'драма', 142, 9.111],
['Крёстный отец', 'США', 1972, 'драма, криминал', 175, 8.730],
['Тёмный рыцарь', 'США', 2008, 'фантастика, боевик, триллер', 152, 8.499],
['Список Шиндлера', 'США', 1993, 'драма', 195, 8.818],
['Властелин колец: Возвращение Короля', 'Новая Зеландия', 2003, 'фэнтези, приключения, драма', 201, 8.625],
['Криминальное чтиво', 'США', 1994, 'триллер, комедия, криминал', 154, 8.619],
['Хороший, плохой, злой', 'Италия', 1966, 'вестерн', 178, 8.521],
['Бойцовский клуб', 'США', 1999, 'триллер, драма, криминал', 139, 8.644],
['Харакири', 'Япония', 1962, 'драма, боевик, история', 133, 8.106],
['Сталкер', 'СССР', 1979, 'фантастика, драма, детектив', 163, 8.083],
['Иди и смотри', 'СССР', 1985, 'драма, военный', 136, 8.094]
]
rating_total = 0# присвойте начальное значение счётчику
# напишите ваш код здесь
for rating in movies_table:
rating_total += rating[5]
print(rating_total)
5.6 Добавление столбца в таблицу.
Задание №1
В конец каждого вложенного списка добавьте тип фильма: 'полнометражный'.
movies_table = [
['Побег из Шоушенка', 'США', 1994, 'драма', 142, 9.111],
['Крёстный отец', 'США', 1972, 'драма, криминал', 175, 8.730],
['Тёмный рыцарь', 'США', 2008, 'фантастика, боевик, триллер', 152, 8.499],
['Список Шиндлера', 'США', 1993, 'драма', 195, 8.818],
['Властелин колец: Возвращение Короля', 'Новая Зеландия', 2003, 'фэнтези, приключения, драма', 201, 8.625],
['Криминальное чтиво', 'США', 1994, 'триллер, комедия, криминал', 154, 8.619],
['Хороший, плохой, злой', 'Италия', 1966, 'вестерн', 178, 8.521],
['Бойцовский клуб', 'США', 1999, 'триллер, драма, криминал', 139, 8.644],
['Харакири', 'Япония', 1962, 'драма, боевик, история', 133, 8.106],
['Сталкер', 'СССР', 1979, 'фантастика, драма, детектив', 163, 8.083],
['Иди и смотри', 'СССР', 1985, 'драма, военный', 136, 8.094]
]
# напишите ваш код здесь
for movie in movies_table:
movie.append('полнометражный')
for movie in movies_table:
for elem in movie:
print(f'{elem:<45}', end='')
print()
Задание №2
После названия каждого фильма добавьте ячейку о качестве видео — 'FullHD'.
movies_table = [
['Побег из Шоушенка', 'США', 1994, 'драма', 142, 9.111],
['Крёстный отец', 'США', 1972, 'драма, криминал', 175, 8.730],
['Тёмный рыцарь', 'США', 2008, 'фантастика, боевик, триллер', 152, 8.499],
['Список Шиндлера', 'США', 1993, 'драма', 195, 8.818],
['Властелин колец: Возвращение Короля', 'Новая Зеландия', 2003, 'фэнтези, приключения, драма', 201, 8.625],
['Криминальное чтиво', 'США', 1994, 'триллер, комедия, криминал', 154, 8.619],
['Хороший, плохой, злой', 'Италия', 1966, 'вестерн', 178, 8.521],
['Бойцовский клуб', 'США', 1999, 'триллер, драма, криминал', 139, 8.644],
['Харакири', 'Япония', 1962, 'драма, боевик, история', 133, 8.106],
['Сталкер', 'СССР', 1979, 'фантастика, драма, детектив', 163, 8.083],
['Иди и смотри', 'СССР', 1985, 'драма, военный', 136, 8.094]
]
# напишите ваш код здесь
for movie in movies_table:
movie.insert(1,'FullHD')
for movie in movies_table:
for elem in movie:
print(f'{elem:<45}', end='')
print()
5.7 Анализ значений в нескольких столбцах.
Задание №1
В каждой строке таблицы — данные о выручке магазинов в разных регионах: элемент с индексом 1 — выручка за первое полугодие; с индексом 2 — за второе. Добавьте в конец каждого вложенного списка сумму продаж за год.
sales = [
['Московская область',105820,112180],
['Ленинградская область',85899,91021],
['Самарская область',35010,32001],
['Ростовская область',37011,39595]
]
# напишите ваш код здесь
for sale in sales: # перебираем списки
year = (sale[1] + sale[2])
sale.append(year) # добавляем полученное значение в конец текущего списка
print(sales)
5.8 Сортировка списка списков.
5.9 Заключение.
В этой теме вы познакомились с вложенными списками — их элементами являются другие списки. Вложенные списки помогают отразить таблицы в Python, но это ещё не всё — скоро вы познакомитесь с новой структурой данных. Чтобы ничего не забыть, скачайте шпаргалку темы.
5.10 Проверочные задания. Вложенные списки.
Проверочные задания. Вложенные списки
Чтобы пройти тест нужно правильно ответить на 5 вопросов из 10. Время на прохождение: 10 минут
Правильный ответ [[7], [7], [7]]
Правильный ответ [[7, 7, 7]]
[7] Элементы вложенного списка — другие списки. В них может быть всего по одному элементу, как в примере [[7], [7], [7]]. Один список может быть целиком вложен в другой, вот так: [[7, 7, 7]]. Практической пользы в такой организации немного. Но использовать вложенные списки всё равно стоит — они помогут упорядочить данные.
Задание 2 из 10
Какой код выведет число 2? matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Правильный ответ print(matrix[0][1])
Внутренние элементы вложенного списка перебирают с помощью индексов или в цикле for. И в том и в другом случае от общего уровня нужно перейти к уровню подсписка. С помощью индексов это делают так: сначала указывают индекс подсписка, затем — индекс элемента. Число 2 находится в первом списке на втором месте. Значит, его вызовет код matrix[0][1].
Задание 3 из 10
Какой код выведет первый элемент каждого подсписка? matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Правильный ответ for row in matrix: print(row[0])
Первый элемент каждого подсписка — это первая «колонка» списка matrix. Вывести такую колонку можно в цикле for. На каждой итерации код выведет первый элемент подсписка. Не забудьте, что его индекс 0.
Задание 4 из 10
Что перебирает первый цикл for? matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] for row in matrix: for col in row: print(col, end=' ') print()
Правильный ответ Каждый вложенный список
Во вложенном списке несколько уровней. Чтобы добраться до всех элементов, используют вложенный цикл for. Первый цикл перебирает элементы списка matrix — это тоже списки. Итератор row принимает значение каждого из них по очереди. Значения внутри подсписков перебирает уже второй цикл. В коде нет индексов — значит, итератор принимает значение каждого элемента, а не только первого.
Задание 5 из 10
Что выведет на экран код? matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] for row in matrix: for col in row: print(col, end=' ') print()
Правильный ответ 1 2 3 4 5 6 7 8 9
Иногда сложно представить, что происходит на каждом этапе вложенного цикла. Стоит разобрать код построчно: «Итератор row принимает значение первого подсписка, а итератор col перебирает все его значения. Затем первый цикл начинается снова — итератор row принимает значение второго подсписка...» и т. д. В этом коде второй цикл печатает один элемент за одну итерацию, добавляя в конец пробел. За это отвечает параметр end. Функция print() в пятой строчке кода относится не ко второму циклу, а к первому. Она добавит вывод с новой строки после каждого подсписка.
Задание 6 из 10
В таблицу из списка списков нужно добавить новый столбец. Какие методы можно использовать? Выберите несколько вариантов.
Правильный ответ append()
Правильный ответ insert()
Новый столбец можно создать так: добавить в каждый подсписок один новый элемент. Можно применить метод для списков append() — он добавит по элементу в конец подсписка. Чтобы вставить элемент в любое место, используют метод insert().
Задание 7 из 10
Какой код добавит новую колонку после названия фильма? movies = [ ['Одержимость', 106], ['Школа рока', 109], ['Ла-ла Ленд', 128], ]
Правильный ответ for movie in movies: movie.insert(1, 'США')
Для такой задачи подойдёт метод insert(). Его используют, чтобы добавить элемент в любое место списка. Для этого в аргументе указывают индекс — позицию нового элемента.
Задание 8 из 10
Какой код посчитает суммарную продолжительность фильмов? movies = [ ['Одержимость', 106], ['Школа рока', 109], ['Ла-ла Ленд', 128], ]
Правильный ответ total = 0
for movie in movies: total += movie[1]
Весь секрет в индексах. Чтобы сложить длительность фильмов, нужно извлечь второй элемент каждого подсписка. Цикл перебирает каждый подсписок и выбирает элемент с индексом 1, прибавляя его к значению в счётчике total. Остальные варианты не сработают — в счётчике будут складываться разные типы данных, и произойдёт ошибка.
Задание 9 из 10
Во второй и третьей колонках — значения рейтингов на платформах Кинопоиск и IMDb. Какой код посчитает средний рейтинг каждого фильма и добавит значения в качестве нового столбца? movies = [ ['Одержимость', 8.3, 8.5], ['Школа рока', 7.2, 7.1], ['Ла-ла Ленд', 7.9, 8.0], ]
Правильный ответ for movie in movies: avg_rating = (movie[1] + movie[2]) / 2 movie.append(avg_rating)
for movie in movies: avg_rating = (movie[2] + movie[3]) / 2 movie.append(avg_rating)
Для такой задачи конструкция со счётчиком не подойдёт. Средний рейтинг нужно посчитать для каждого фильма, поэтому результат вычислений лучше сохранять внутри цикла for. На каждой итерации в переменную avg_rating записывается средний рейтинг фильма. Метод append() добавит его в конец подсписка. Так получится новая колонка из трёх значений. И не забудьте про нумерацию: у второй и третьей колонки индексы 1 и 2 соответственно.
Задание 10 из 10
Какой код отсортирует списки по возрастанию продолжительности фильмов? Выберите несколько вариантов. movies = [ ['Ла-ла Ленд', 128], ['Одержимость', 106], ['Школа рока', 109], ]
Правильный ответ movies_sorted = sorted(movies, key=lambda row: row[1])
Правильный ответ movies_sorted = sorted(movies, key=lambda row: row[1], reverse=False)
Метод sorted() используют, чтобы отсортировать значения. Параметр метода reverse управляет порядком сортировки. Если передать параметру значение True, списки будут расположены по убыванию, если False — по возрастанию. Но значение параметра можно и не указывать — тогда списки будут отсортированы от меньшего к большему.
Следующая тема: БРу. Условный оператор
Вернуться в раздел: Базовый Python
Вернуться в оглавление: Я.Практикум