01-10-2018 15:04

Программирование на Python. Список в Python: базовые операции

В Python списки — это упорядоченные коллекции. Они являются важной составляющей программного кода. Списки относятся к встроенным объектам языка. С их помощью можно быстро и эффективно обрабатывать большой объем информации и структуры данных любой сложности.

Свойства и особенности объекта list

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

Какой парктроник лучше выбрать? Обзор парктрониковВам будет интересно:Какой парктроник лучше выбрать? Обзор парктроников

У списков есть определенный набор свойств, отличающий их от других типов данных:

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

Списки можно ошибочно принять за связанные структуры данных. Но на самом деле они являются контейнерами ссылок на объекты, а не их копий. Они как адресная книга. Все элементы list указывают на место, где находится нужный объект. В этом списки Python аналогичны массивам языка C, но реализованы в интерпретаторе.

Базовые операции последовательностей

Телевизор Haier: отзывы покупателейВам будет интересно:Телевизор Haier: отзывы покупателей

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

У последовательностей также есть свои характерные операции:

  • доступ к элементу с использованием целочисленных индексов __getitem __ ();
  • определение длины __len __ ();
  • конкатенация с помощью оператора «+»;
  • извлечение среза [:].

Списки в действии

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

Как выглядят методы списков на практике:

  • >>>мой_список = [«один», «2», «три»] #создание нового list;
  • >>>мой_список;
  • [«один», «2», «три»];
  • >>>len(мой_список);
  • 3 #интерпретатор возвращает длину;
  • >>>мой_список + [1, 2, 3] #выполнение конкатенации;
  • [«один», «2», «три», 1, 2, 3];
  • >>> мой_список * 2 #повторение;
  • [«один», «2», «три», «один», «2», «три»].

Программа Adguard: отзывы. Блокировщик рекламы AdguardВам будет интересно:Программа Adguard: отзывы. Блокировщик рекламы Adguard

При выполнении конкатенации с каждой стороны от знака «+» должны находиться однотипные последовательности, в противном случае интерпретатор выдаст сообщение об ошибке:

  • >>>[1, 2, 3] + 3.14 # TypeError: can only concatenate list (not «float») to list.

Для того чтобы сложить в Python строку и список, нужно выполнить предварительное преобразование для типа str:

  • >>>второй_список = list(«строка») # преобразование объекта «строка»;
  • >>>второй_список;
  • [«с», «т», «р», «о», «к», «а»] #интерпретатор возвращает list;
  • >>>второй_список + мой_список;
  • [«с», «т», «р», «о», «к», «а», «один», «2», «три»].

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

Что такое итерация и генераторы списков

Итерация представляет собой процесс повторения. В контексте списков – это поочередное продвижение по элементам итерируемого объекта. Например:

  • >>>3 in [1, 2, 3] #проверит, входит ли указанный элемент;
  • True;
  • >>>for x in [1, 2, 3, 4]: #выполнит итерацию;
  • print(x);
  • 1;
  • 2;
  • 3;
  • 4.

Если итерация – это просто обход каждого элемента, то генерация является процессом создания нового объекта типа list. В Python генераторы списка похожи на циклы for, но быстрее работают и синтаксически выглядят гораздо проще:

  • >>>Список_1 = [c * 4 for c in «SPAM»] #так выглядит генерация;
  • >>>Список_1;
  • [«SSSS», «PPPP», «AAAA», «MMMM»];
  • >>>Список_2 = [];
  • >>>for c in «SPAM»: #аналогичная генерации команда;
  • Список_2.append(c * 4) #list.append() добавляет новые элементы;
  • >>>Список_2;
  • [«SSSS», «PPPP», «AAAA», «MMMM»].

В обоих примерах результат идентичен. Но с использованием генератора код получается гораздо короче и легче. Такой подход полностью соответствует The Zen of Python. Это дзен, или кодекс языка, в котором один из пунктов гласит: «Простое лучше сложного».

Извлечение среза и доступ по индексу

Эти две операции внешне похожи и позволяют обрабатывать отдельные элементы списка в Python. Но есть существенное различие. В результате индексации возвращается отдельная часть последовательности. А извлечение среза создает новый объект типа list:

  • >>>Список1 = [«спам», «Спам», «СПАМ!»]
  • >>>Список1[2] #отсчет смещений начинается с нуля
  • «СПАМ!»
  • >>>Список1[-2] #отрицательное смещение: отсчитывается справа
  • «Спам»
  • >>>Список[1:] #операция извлечения среза возвращает разделы объекта
  • [«Спам», «СПАМ!»]

Как происходит операция извлечения среза и ее возможности

Конструкции языка позволяют не только извлекать, но и изменять отдельные элементы, присваивая им новые значения. В результате возвращается тот же список, только с другой переменной. Эта операция похожа на присваивание по индексу в языке C. Интерпретатор заменяет старую ссылку на указанный в смещении объект новой:

  • >>>мой_список = [«один», «восемь», «сто»];
  • >>>мой_список[0:2] = [«девяносто восемь», «девяносто девять»];
  • >>>мой_список;
  • [«девяносто восемь», «девяносто девять», «сто»].

Это достаточно сложная операция, которая происходит в несколько этапов. Сначала интерпретатор удаляет все элементы слева от оператора. В данном примере это «один» и «восемь». Потом все объекты справа от оператора вставляются в список, начиная с левого края.

Описанный процесс обеспечивает гибкую работу со срезами. Количество удаляемых и добавляемых элементов может быть разным. Операция подходит для удаления и замещения объектов, а также для расширения списков. Это довольно мощный способ обрабатывать код. Но программисты редко используют его на практике, предпочитая более простые инструкции insert, pop и remove.

Специфические методы объектов типа list

Большинство методов, или функций направлено на непосредственное изменение объекта. Самым распространенным является .append(). Он добавляет элементы в конец списка:

  • >>> my_L = [«Я», «люблю», «программировать», «на»];
  • >>> my_L;
  • [«Я», «люблю», «программировать», «на»];
  • >>> my_L.append(«Питон») #добавит элемент, указанный в скобках;
  • >>> my_L;
  • [«Я», «люблю», «программировать», «на», «Питон»].

Другой не менее популярный метод называется sort(). Предназначен для сортировки списков в Python. Метод выполняет переупорядочивание элементов с использованием стандартных операторов сравнения. Также его можно использовать для более сложных задач с помощью именованных аргументов:

  • >>>L = [«abc», «ABD», «aBe»];
  • >>>L.sort(key=str.lower, reverse=True) # Изменяет направление сортировки;
  • >>>L;
  • [«aBe», «ABD», «abc»].

В примере использовалась синтаксическая конструкция «имя = значение» для передачи параметров настройки. Аргумент key позволяет задать собственные параметры для сравнения. В данном случае это элементы с маленькой буквы. А reverse означает «наоборот», то есть в порядке убывания, а не возрастания.

Подводные камни методов

При работе с данными методами необходимо учитывать следующие особенности: .sort() и .append() изменяют список, но не возвращают его. Конструкция мой_список = Список.sort() не имеет смысла и результата. Именно поэтому в последних версиях языка разработчики ввели функцию sorted(), которая принимает list в качестве аргумента:

  • >>>мой_список = [1, 100, 56, 34, 2, 99];
  • >>>дубль_списка = мой_список.sort();
  • >>>дубль_списка #интерпретатор ничего не возвращает;
  • >>>мой_список;
  • [1, 2, 34, 56, 99, 100];
  • >>>дубль_списка = sorted(мой_список);
  • >>>дубль_списка;
  • [1, 2, 34, 56, 99, 100] #интерпретатор возвращает отсортированную копию объекта.

Дополнительные методы

Python предлагает дополнительные методы для выполнения специализированной обработки списков. Например, для изменения порядка следования элементов используется reverse. Чтобы вставить несколько элементов в конец или удалить, нужны методы extend и pop. Также существует функция reversed, которая напоминает sorted, но используется через вызов list:

  • >>>L;
  • [4, 3, 2, 1];
  • >>>list(reversed(L)) #встроенная функция сортировки в обратном порядке;
  • [1, 2, 3, 4].

Все рассмотренные операции чаще всего применяются к спискам и являются базовыми. Но есть узкоспециализированные методы. Например, .copy(), который создает поверхностную копию объекта, и .count(), возвращающий количество элементов. Чтобы увидеть весь доступный в Python список функций применимых к объекту list, нужно ввести help() или dir() в интерпретаторе.



Источник