Найти в Дзене

Работа со списками в Python

Оглавление

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

О том, что такое списки и массивы

В классической архитектуре, предложенной фон Нейманом, любой компьютер обязательно должен иметь две главные составляющие: процессор и память. Про процессор мы разговаривали ранее. Сейчас же обсудим, как можно представить упрощённую модель памяти компьютера.

Процессор работает с последовательностями нулей и единиц - с числами в двоичной системе счисления. Соответственно, и данные пользователя, и инструкции-команды процессора должны быть предварительно закодированы. О кодировании данных можно почитать отдельную статью (4-ое задание ЕГЭ по информатике).

После кодирования данные и инструкции записываются в память. Думая
о памяти, Вы сразу же вспоминаете различные устройства хранения информации: флешка, CD-диски, HDD, SDD и даже такие совсем "устаревшие" устройства, как магнитные ленты.

Хотя магнитные ленты всё ещё вполне успешно используются. Например, компания GitHub решила использовать именно магнитную плёнку в качестве надёжного устройства тысячелетнего хранения данных в рамках проекта сохранения открытого кода в вечной мерзлоте. Проект называется "GitHub Arctic World Archive" - рекомендую хотя бы мельком ознакомиться :)

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

Память компьютера можно представить в виде ленты с ячейками, в которые записаны разряды чисел в двоичной системе счисления
Память компьютера можно представить в виде ленты с ячейками, в которые записаны разряды чисел в двоичной системе счисления

Процессор умеет считывать любые значения из любых ячеек памяти компьютера. Мы можем записывать в ячейки любые наши данные. Со временем работа с этой моделью приведёт Вас к мысли, что однотипные данные, относящие к одной задаче, удобнее всего записывать друг за другом - так можно не искать их по всей "ленте", ведь они все будут в одном месте. Так появляется понятие массива. Массив объединяет несколько объектов под одним именем.

Массив - это именованная область памяти, хранящая однотипные данные.

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

В отличие от массива, список способен хранить данные различных типов.

Создание списка в Python

Для создания списка можно воспользоваться одним из двух способов:

1. Функция list() без аргументов может создать пустой список. Если же передать в неё итерируемый объект, будет создан список, содержащий элементы этого объекта.

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

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

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

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

Пример создания списка и получения элемента по его индексу. Так как индекс начинается с нуля, элемент "19" находится под индексом "3", а не "4"
Пример создания списка и получения элемента по его индексу. Так как индекс начинается с нуля, элемент "19" находится под индексом "3", а не "4"

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

Как уже упомянули выше, мы обращаемся к элементам списка по их индексу. Синтаксис следующий:

список[индекс]

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

Пример перебора элементов списка
Пример перебора элементов списка

При переборе элементов списка по индексам необходимо задать диапазон, по которому пройдётся переменная-счётчик. Самый стандартный вариант - перебрать все индексы в полуинтервале [0; "последний элемент"). Как раз для этого и используется конструкция range(len(список)).

Функции, применяемые к спискам

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

Получение длины списка - len()

Функция len() получает в качестве аргумента итерируемый объект и возвращает число - количество элементов в этом объекте. Часто функция len() применяется в связке с range() для организации перебора элементов цикла. Пример уже был рассмотрен выше.

Получение максимального/минимального элемента списка - max()/min()

max()/min() часто используется для нахождения максимального/минимального числа в списке. Кроме того, эти функции позволяют в некоторых случаях избавиться от дополнительной проверки в 17, 25, 26 задании (рассмотрим в следующих заметках).

Применение функция min/max
Применение функция min/max

Нахождение суммы элементов, среднего значения - sum()

Для нахождения суммы чисел списка используется функция sum().

Для нахождения среднего значения элементов списка не существует отдельной функции, но возможно применение уже знакомых sum() и len().

Применение функции sum и нахождение среднего значения
Применение функции sum и нахождение среднего значения

Сортировка списка - sorted()

Для упорядочивания элементов списка может быть использована функция sorted(). Эта функция может быть полезна не только при работе с числами, но и при сортировке элементов, являющихся строками - тогда сортировка осуществляется в алфавитном порядке.

Фрукты в массиве отсортировались в алфавитном порядке от А к Я
Фрукты в массиве отсортировались в алфавитном порядке от А к Я

Особенность использования списков в ЕГЭ

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

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

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

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

Данные мы можем считывать не только из готового массива. Мы можем создать массив и добавить в него элементы.

Методы списков

У списков есть собственные методы. Наиболее часто мы будем использовать append() и sort(). Кроме этих методов существуют и другие, но в данной заметке ограничимся двумя.

Добавление нового элемента в список - append()

Метод append() просто добавляет элемент в конец существующего списка. Очень часто этот метод используется внутри цикла - например, при генерации нового массива.

С помощью цикла и метода append() был создан массив чисел в диапазоне [0, 19], делящихся на 3
С помощью цикла и метода append() был создан массив чисел в диапазоне [0, 19], делящихся на 3

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

Сортировка списка - метод sort()

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

С помощью метода sort с ключевым аргументом reverse список был отсортирован в порядке убывания
С помощью метода sort с ключевым аргументом reverse список был отсортирован в порядке убывания

Не путайте функцию sorted() и метод sort(). Функция sorted() возвращает новый массив, а sort() изменяет существующий.

Заключение

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

Наука
7 млн интересуются