Module (93%)
Section (57%)

Многомерный характер списков: продвинутые приложения

Давайте углубимся в многомерную природу списков. Чтобы найти любой элемент двумерного списка, вы должны использовать две координаты:

  • вертикальный (номер строки)
  • и горизонтальный (номер столбца).

Представьте, что Вы разрабатываете программное обеспечение для автоматической метеостанции. Прибор фиксирует температуру воздуха ежечасно и делает это в течение месяца. Это дает Вам в общей сложности 24 × 31 = 744 значения. Попробуем составить список, способный хранить все эти результаты.

Во-первых, Вы должны решить, какой тип данных подходит для этого приложения. В этом случае лучше всего подойдет float, поскольку этот термометр может измерять температуру с точностью до 0,1 ℃.

Затем Вы принимаете произвольное решение, что строки будут записывать показания каждый час (таким образом строка будет иметь 24 элемента), и каждая из строк будет назначена одному дню месяца (предположим, что в каждом месяце 31 день, а значит Вам понадобится 31 строка). Вот подходящая пара включений (h для часа, d для дня):

temps = [[0.0 for h in range(24)] for d in range(31)]

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


Пришло время определить среднемесячную полуденную температуру. Сложите все 31 показание, записанное в полдень, и разделите полученную сумму на 31. Вы можете предположить, что сначала сохраняется полуночная температура. Вот соответствующий код:

temps = [[0.0 for h in range(24)] for d in range(31)] # # The matrix is magically updated here. # total = 0.0 for day in temps: total += day[11] average = total / 31 print("Average temperature at noon:", average)

Примечание: переменная day, используемая циклом for, не является скаляром - каждый проход через матрицу temps присваивает ей следующие строки матрицы; следовательно, это список. Он должен быть проиндексирован значением 11, чтобы получить доступ к значению температуры, измеренному в полдень.


Теперь найдите самую высокую температуру за весь месяц - посмотрите на код:

temps = [[0.0 for h in range(24)] for d in range(31)] # # The matrix is magically updated here. # highest = -100.0 for day in temps: for temp in day: if temp > highest: highest = temp print("The highest temperature was:", highest)

Примечание:

  • переменная day выполняет итерацию по всем строкам в матрице temps;
  • переменная temp выполняет итерацию по всем измерениям, выполненным за один день.

Теперь посчитайте дни, когда температура в полдень была не ниже 20 ℃:

temps = [[0.0 for h in range(24)] for d in range(31)] # # The matrix is magically updated here. # hot_days = 0 for day in temps: if day[11] > 20.0: hot_days += 1 print(hot_days, "days were hot.")

Code

{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×