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

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

Наша задача в этом руководстве - вычислить среднюю и максимальную температуру за определенную неделю. У нас есть ежедневные измерения температуры за неделю. Мы также хотим вывести три самых низких температуры.

Прежде всего, мы хотим как-то сохранить эти значения, а затем рассчитать среднюю и максимальную температуру. Мы сделаем это без использования встроенных методов списков. Затем мы найдем три самые низкие температуры, изучая некоторые важные методы.

Как мы можем эффективно хранить эти температуры и другие формы данных с помощью Python? Один из способов сделать это - использовать список, давайте взглянем на списки в Python.

Исходный код этой статьи можно загрузить из моего репозитория GitHub Python.

Давайте начнем!

Зачем нужны списки?

Например, если мы хотим сохранить текущую температуру, мы можем просто сказать

temperature = 45

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

Что, если мы хотим хранить температуру в течение всего года или даже многих лет, можем ли мы продолжать это делать? конечно, это будет непрактично. Кроме того, нам нужно будет написать выражения, которые будут включать все эти переменные, например:

Сумма = температура1 + температура2 +… + температура365

Какой способ программирования не самый лучший, верно?

Одним из ответов на подобные проблемы в Python является использование списков.

Списки на Python

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

Чтобы написать, что мы просто помещаем значения в квадратные скобки, например, у нас есть следующий список из четырех элементов:

temperatures = [12, 45, 39, 18]

Мы создали список под названием «температуры», который содержит четыре элемента, значения внутри списка упорядочены с индексами, начинающимися от 0 до 3.

Элементы в списке могут иметь данные любого типа

Мы можем создавать списки с любыми типами данных, такими как строки, логические значения и т. Д., Или даже вы можете смешивать типы внутри списка, но зачем вам это делать?

Например, у нас есть этот список с названиями валют:

currencies= ["EUR","USD","CAD"]

Доступ к данным внутри списка

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

print(temperatures[0])

Или вторым элементом мы пишем температуры [1] и так далее.

Почему мы считаем с нуля?

В большинстве языков программирования индексы не начинаются с нуля. Итак, первый элемент в наборе элементов имеет номер ноль, но считается как один, а второй - номер один, и счетчик равен двум. Это связано с тем, как память организована и как на нее ссылаются.

Доступ к последнему элементу

Еще одна замечательная особенность Python заключается в том, что мы можем ссылаться на последний индекс с помощью -1. Кроме того, другие элементы в списке расположены в обратном порядке с отрицательными значениями индекса.

Это означает, что если мы хотим получить доступ к последнему элементу, который равен 18, мы можем написать:

print(temperatures[-1])

Также элемент перед последним (39), написав температуры [-2] и так далее.

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

Мы используем здесь print, чтобы продемонстрировать доступ к значению, но мы можем делать с ним все, что захотим, например, включать элементы в выражения.

При желании можно распечатать весь список, сославшись на его имя:

print(temperatures)

Это напечатает все значения в квадратных скобках: [12, 45, 39, 18].

Изменение значений элементов в списке

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

Например, предположим, что нам нужно изменить значение второго элемента (с индексом 1) на 23, мы можем просто сделать это следующим образом:

temperatures[1] = 23

Решение нашей проблемы

Вернемся к нашей проблеме, поскольку теперь мы знаем, как сохранять температуру в списке.

Напомним, что создайте папку с названием «temperature» и откройте в ней VS Code. Создайте файл с именем «main.py».

Внутри main.py давайте создадим наш список, содержащий температуру за всю неделю, так что у нас есть список из семи элементов.

temperatures = [30, 34, 32, 18, 10, 20, 8]

Чтобы вычислить среднее значение, мы можем использовать цикл while или for, но, как мы увидим, цикл for намного проще, когда мы имеем дело с похожими структурами данных.

Вычисление среднего с использованием цикла while

Как мы видели, индекс может быть числовым литералом или переменной, например, если у нас есть переменная «i» со значением 2, мы можем получить доступ к температуре в позиции «i».

i=2
print(temperatures[i])

Чтобы добавить все числа в список, мы можем создать цикл с переменной «i» от 0 до 6, который складывает все значения в перечислите в индексах от 0 до 6 и сохраните результат в значении, называемом «итого».

Затем, по окончании цикла, мы делим «total» на 7 и получаем среднюю температуру.

Мы будем использовать оператор «+ =», который добавляет к предыдущему значению переменной новое значение и присваивает ему результат, поэтому вместо записи:

i = i + 1
#we can write
i += 1
temperatures = [30, 34, 32, 18, 10, 20, 8]
sum = 0
i = 0
while i < 7:
    sum += temperatures[i]
    i += 1
average = sum/7
print("The average is " + str(average))

Если мы не хотим использовать числовые литералы, такие как 7, что не является хорошей практикой при написании чистого кода, мы можем определить переменную list_length, а также присвоить ей длину списка с помощью функции len(), которая возвращает длина списка:

temperatures = [30, 34, 32, 18, 10, 20, 8]
list_length = len(temperatures)
sum = 0
i = 0
while i < list_length:
    sum += temperatures[i]
    i += 1
average = sum/list_length
print("The average is " + str(average))

Что, если бы мы проиндексировали элемент вне диапазона списка?

Мы получим эту ошибку времени выполнения, если попытаемся получить доступ к элементу вне списка.

IndexError: список индекса вне допустимого диапазона

Решение проблемы с циклом for

Например, чтобы перебрать список температур, мы напишем:

for t in temperatures:

Итак, теперь каждая температура обозначается переменной «t».

Замените код следующим кодом:

temperatures = [30, 34, 32, 18, 10, 20, 8]
sum = 0
for t in temperatures:
    sum += t
average = sum/len(temperatures)
print("The average is " + str(average))

Это намного проще, чем цикл while, поскольку нам не нужно индексировать каждый элемент в списке.

Определение максимальной температуры

Как видите, все значения внутри списка не отсортированы, поэтому единственный способ определить максимальное - просмотреть весь список.

Мы определим переменную «max» для хранения максимального значения, предположим, что первый элемент является максимальным.

max = temperatures[0]

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

for t in temperatures:
    if t > max:
        max = t

После того, как мы закончили, у нас есть максимальное значение, сохраненное в переменной max, поэтому теперь мы можем его вывести.

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

temperatures = [30, 34, 32, 18, 10, 20, 8]
max = temperatures[0]
sum = 0
for t in temperatures:
    sum += t
    if t > max:
        max = t
average = sum/len(temperatures)
print("The average is " + str(average))
print("The maximum is " + str(max))

Небольшая домашняя работа для вас, можем ли мы также узнать, где было найдено максимальное значение? По какому индексу? Это было бы полезно, поскольку мы также можем связать его с датой, поскольку индекс нашего списка представляет день недели. Я оставлю это тебе.

Совет: используйте цикл while.

Нахождение трех самых низких температур

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

Найти три самых низких температуры, используя тот же метод, который мы использовали для определения максимума, не совсем легко. Воспользуемся другим алгоритмом.

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

Сортировка списка

Для сортировки списка воспользуемся встроенным методом sort (), который по умолчанию сортирует список в порядке возрастания. Попробуем отсортировать и распечатать список после сортировки.

temperatures.sort()
print(temperatures)

Список будет отсортирован напечатанным: [8, 10, 18, 20, 30, 32, 34]

Если мы хотим, чтобы сортировка была в порядке убывания, мы можем написать:

temperatures.sort(reverse=True)

Но здесь есть небольшая проблема. Порядок элементов был изменен, и мы этого не хотим. Каково решение?

Сделаем еще одну копию и оставим наши данные в безопасности.

Копирование списка

Если мы хотим сделать еще одну копию списка температур, мы не можем просто сказать:

copy_list = temperatures

Это только сделает еще одну ссылку на наш список с именем copy_list с теми же элементами в памяти и не создаст другой список.

Таким образом, если мы изменяем элементы с помощью одной из ссылок на переменные, то же изменение будет видно и в другой, поскольку две переменные (copy_list, температуры) ссылаются на один и тот же список.

Очистите один из них методом clear() и распечатайте другой, он также будет очищен.

copy_list = temperatures
copy_list.clear()
print(temperatures)

Это важно знать, и мы поймем почему, когда будем исследовать объекты в будущих статьях.

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

copy_list = temperatures.copy()

Теперь два списка (copy_list и температуры) независимы, и если мы изменим один из них, другой не будет затронут.

Теперь мы готовы, мы можем отсортировать copy_list и распечатать первые три элемента, но давайте посложним. Давайте составим еще один список, чтобы удерживать самые низкие температуры.

Чтобы добавить элементы в новый список, воспользуемся методом append (). Мы также будем использовать цикл for для добавления элементов из copy_list в top_list по индексам от 0 до top, что в нашем случае равно трем.

top = 3
top_list=[]
for t in range(top):
    top_list.append(copy_list[t])

Мы также можем просто удалить другие элементы из copy_list, используя метод pop (). Попробуйте сделать это как небольшое упражнение.

Полный код

temperatures = [30, 34, 32, 18, 10, 20, 8]
max = temperatures[0]
sum = 0
for t in temperatures:
    sum += t
    if t > max:
        max = t
average = sum/len(temperatures)
print("The average is " + str(average))
print("The maximum is " + str(max))
 
copy_list = temperatures.copy()
copy_list.sort()
top =3
top_list=[]
for t in range(top):
    top_list.append(copy_list[t])
print("The lowest three temperatures are: " +str(top_list) )

Заключение

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

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

Методы и функции отличные, мы их использовали и сэкономили много времени. В следующем руководстве мы увидим, как создавать собственные функции. Увидимся там!

Следуйте за мной, чтобы узнать больше о Python Сари Лаккис

Читайте также





Циклы пока в Python
В этом руководстве мы узнаем о циклах в Python. Мы увидим «цикл while
и узнаем, как его использовать для решения нашей… sarilakkis.medium.com »