Включите исполнение JavaScript в браузере, чтобы запустить приложение.

Списки в Python: как с ними работать

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

Что такое списки в Python

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

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

Например, вы планируете поход в продуктовый магазин. Можно создать список на Python под названием grocery_list, чтобы отслеживать все товары, которые нужно купить. Каждый элемент — «яблоки», «бананы» или «молоко», подобен элементу в списке. Так это будет выглядеть в коде:

grocery_list = ["apples", "bananas", "milk"]
py

Список Python — это динамическая, изменяемая, упорядоченная коллекция элементов, заключенных в квадратные скобки [ ]. 

У списков есть характеристики:

  • они могут содержать элементы разных типов одновременно (строки, целые числа, числа с плавающей запятой и логические значения);
  • эти величины изменяемы и динамичны, а элементы можно добавлять, удалять или изменять после того, как список определен;
  • они упорядочены, вновь добавленные позиции будут помещены в конец;
  • используется индексация на основе нуля, каждый элемент имеет соответствующий индекс, а индекс первого элемента равен 0;
  • этот тип данных может быть вложен в другие списки на неопределенный срок.

Как создать список в Python

Чтобы создать список в Python, запишите набор элементов в квадратных скобках ([]) и разделите каждую позицию запятой. Составляющими  перечня могут быть объекты любого базового типа, встречающиеся в Python.

Например, чтобы создать список с именем «z», содержащий целые числа 3, 7, 4 и 2, нужно написать:

# Define a list

z = [3, 7, 4, 2]
py

Список «z», определенный выше, содержит элементы одного типа (integer или int.) Но не все позиции должны быть одинаковыми: 

# Define a list

heterogenousElements = [3, True, 'Michael', 2.0]
py

Основные методы работы со списками

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

Index

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

months = ['January', 'February', 'March', 'April', 'May'] 

months.index('March')

Output:

2
py

Еще один пример:

# vowels list

vowels = ['a', 'e', 'i', 'o', 'i', 'u']

# index of 'e' in vowels

index = vowels.index('e')

print('The index of e:', index)

# element 'i' is searched

# index of the first 'i' is returned

index = vowels.index('i')

print('The index of i:', index)

Output

The index of e: 1

The index of i: 2
py

Sort

Он нужен для сортировки всех объектов.

prime_numbers = [11, 3, 7, 5, 2]

# sort the list in ascending order

prime_numbers.sort()

print(prime_numbers)

# Output: [2, 3, 5, 7, 11]
py

Еще пример:

cities = ["Tokyo", "London", "Washington D.C"]

# sort in dictionary order

cities.sort()

print(f"Dictionary order: {cities}")

# sort in reverse dictionary order

cities.sort(reverse = True)

print(f"Reverse dictionary order: {cities}")

Dictionary order: ['London', 'Tokyo', 'Washington D.C']

Reverse dictionary order: ['Washington D.C', 'Tokyo', 'London']

Append. Добавляет элемент в конец.

months = ['January', 'February', 'March'] 

months.append('April') 

print(months)

Output:

['January', 'February', 'March', 'April']
py

Также можно выполнить итерацию по каждому пункту, используя цикл for. 

for element in months:

    print(element)

Output:

January

February

March

April
py

Пример 2:

# animals list

animals = ['cat', 'dog', 'rabbit']

# list of wild animals

wild_animals = ['tiger', 'fox']

# appending wild_animals list to animals

animals.append(wild_animals)

print('Updated animals list: ', animals)

Output

Updated animals list:  ['cat', 'dog', 'rabbit', ['tiger', 'fox']]
py

Extend

Добавляет все элементы указанной итерируемой переменной (список, кортеж, словарь, строка) в конец.

В этом примере расширяем наш первоначальный список, содержащий три объекта, до перечня на шесть объектов:

list = [1, 2, 3] 

list.extend([4, 5, 6]) 

list

Output:

[1, 2, 3, 4, 5, 6]
py

Пример 2:

languages = ['French']

languages_tuple = ('Spanish', 'Portuguese')

# add items of the tuple to the languages list

languages.extend(languages_tuple)

print( languages) 

languages_set = {'Chinese', 'Japanese'}

# add items of the set to the languages list

languages.extend(languages_set)

print(languages)

Output

['French', 'Spanish', 'Portuguese']

['French', 'Spanish', 'Portuguese', 'Japanese', 'Chinese']
py

Clear

Удаляет все элементы.

# Defining a list

list = [{1, 2}, ('a'), ['1.1', '2.2']]

# clearing the list

list.clear()

print('List:', list)

Output

List: []
py

Count

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

random_list = [4, 1, 5, 4, 10, 4]

random_list.count(5)

Output

1
py

Пример 2:

# random list

random = ['a', ('a', 'b'), ('a', 'b'), [3, 4]]

# count element ('a', 'b')

count = random.count(('a', 'b'))

# print count

print("The count of ('a', 'b') is:", count)

# count element [3, 4]

count = random.count([3, 4])

# print count

print("The count of [3, 4] is:", count)

Output

The count of ('a', 'b') is: 2

The count of [3, 4] is: 1
py

Pop

Удаляет позицию с указанным индексом. Метод также возвращает удаленный элемент.

fruits = ['apple', 'banana', 'cherry', 'orange', 'pineapple']

fruits.pop(2)

Output:

['apple', 'banana', 'orange', 'pineapple']
py

Пример 2:

# programming languages list

languages = ['Python', 'Java', 'C++', 'Ruby', 'C']

# remove and return the last item

print('When index is not passed:') 

print('Return Value:', languages.pop())

print('Updated List:', languages)

# remove and return the last item

print('\nWhen -1 is passed:') 

print('Return Value:', languages.pop(-1))

print('Updated List:', languages)

# remove and return the third last item

print('\nWhen -3 is passed:') 

print('Return Value:', languages.pop(-3))

print('Updated List:', languages)

Output

When index is not passed:

Return Value: C

Updated List: ['Python', 'Java', 'C++', 'Ruby']

When -1 is passed:

Return Value: Ruby

Updated List: ['Python', 'Java', 'C++']

When -3 is passed:

Return Value: Python

Updated List: ['Java', 'C++']
py

Remove

Удаляет первое появление значения.

fruits = ['apple', 'banana', 'cherry', 'orange', 'pineapple']

fruits.remove("banana")

Output:

['apple', 'cherry', 'orange', 'pineapple']
py

Еще пример:

# animals list

animals = ['cat', 'dog', 'dog', 'guinea pig', 'dog']

# 'dog' is removed

animals.remove('dog')

# Updated animals list

print('Updated animals list: ', animals)

Output

Updated animals list:  ['cat', 'dog', 'guinea pig', 'dog']
py

Примеры задач со списками

Удаление повторяющихся элементов. Есть несколько подходов к решению этой проблемы. Один из них — использование объекта set. Например:

>>> list(set([2, 4, 5, 2, 3, 5]))

[2, 3, 4, 5]
py

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

Еще один способ решить проблему удаления повторяющихся пунктов из списка — создать новый с уникальными значениями из исходного. Это можно сделать с помощью такой функции:

>>> def get_unique_items(list_object):

...     result = []

...     for item in list_object:

...         if item not in result:

...             result.append(item)

...     return result

...

>>> get_unique_items([2, 4, 5, 2, 3, 5])

[2, 4, 5, 3]
py

В этой функции список принимается в качестве аргумента. Затем определяется новый пустой список для хранения результата функции. В цикле выполняется итерация по элементам входного варианта. Условие проверяет, отсутствует ли текущий элемент в результате. Если это так, то добавляется элемент с помощью. append(). После завершения цикла возвращается результирующий список, который будет содержать уникальные значения.

Сглаживание многомерных списков. Иногда в программировании может потребоваться обработать данные, которые поступают в виде вложенных списков. Сглаживание этих данных в одномерный объект — подходящий вариант. Рассмотрим такой вложенный формат:

[[0, 1, 2], [10, 11, 12], [20, 21, 22]]

Обработка может быть неудобной из-за вложенной структуры. Поэтому нужно сгладить его и получить такой результат:

[0, 1, 2, 10, 11, 12, 20, 21, 22]

Сделать это можно с помощью следующего кода:

>>> matrix = [[0, 1, 2], [10, 11, 12], [20, 21, 22]]

>>> flattened_list = []

>>> for row in matrix:

...     flattened_list.extend(row)

...

>>> flattened_list

[0, 1, 2, 10, 11, 12, 20, 21, 22]
py

В цикле for выполняется итерация по вложенным спискам в matrix. Затем применяется метод .extend(), чтобы добавить содержимое текущего подсписка в flattened_list в качестве независимых элементов. В результате этого цикла получается сглаженный список.

Использование списка в качестве стека или очереди. В эмуляции структуры данных стека или очереди помогут методы .append() и .pop(). Например, чтобы имитировать структуру данных stack или last-in-first-out (LIFO), можно применить. append(): это поместит элемент на вершину стека. .Pop() без аргументов полезен для перемещения элементов из верхней части стека:

>>> stack = []

>>> stack.append("Copy")

>>> stack.append("Paste")

>>> stack.append("Remove")

>>> stack

['Copy', 'Paste', 'Remove']

>>> stack.pop()

'Remove'

>>> stack.pop()

'Paste'

>>> stack.pop()

'Copy'

>>> stack

[]
py

В стеке будут храниться действия, которые можно отменить. Сначала создается пустой список под названием stack. Затем в него помещаются гипотетические действия с помощью. append(), который добавляет действия в правый конец. Метод .pop() возвращает действия, чтобы их можно было повторить. Этот же метод удаляет действия из правого конца, следуя порядку LIFO.

Когда стоит применять списки

Их следует использовать, когда нужно:

  • упорядочивать данные — списки поддерживают порядок вставки;
  • хранить последовательность значений — благодаря своей структуре эти данные связаны между собой;
  • менять информацию — они поддерживают множественные изменения;
  • получать доступ к случайным значениям по индексу — списки обеспечивают быстрый и легкий доступ к элементам на основе их индекса.

Выбирайте другие решения, когда необходимо:

  • хранить неизменяемые данные — в этом случае лучше использовать кортежи. Они неизменяемы, экономичнее используют память;
  • представлять записи базы данных. Также стоит применять кортеж или класс данных;
  • хранить уникальные и неупорядоченные значения. Для этого лучше остановиться на применении набора или словаря. Наборы не допускают дублирования значений, а словари не могут содержать дублированные ключи;
  • выполнить множество тестов на принадлежность, где элемент не имеет значения. Стоит использовать наборы: ни оптимизированы для такого типа операций;
  • выполнить расширенные операции с массивами и матрицей. В таких ситуациях нужно рассмотреть возможность применения специализированных структур данных NumPy.

Где можно использовать списки Python

  • Система управления товарами. Храните информацию о товаре в виде вложенных списков. Можно указать название, цену и количество на складе.
  • Софт управления задачами. Используйте многомерный список для хранения задач, где каждая задача представляет собой формат, содержащий название, описание, крайний срок, статус.
  • Система бронирования отелей. Представьте гостиничные номера в виде многомерного массива, где каждая ячейка содержит информацию о размещении и гостях.
  • Обработка изображений. Можно попробовать сохранить значения пикселей изображения в двумерной матрице. Это позволит выполнять фильтрацию, изменение размера, поворот.
  • Моделирование среды. Используйте трехмерную матрицу для представления 3D-среды, где каждая ячейка содержит данные об объектах, присутствующих в этой позиции.
  • Система рекомендаций по фильмам. Сохраняйте информацию о фильме, указывайте название, жанр, режиссера, актерский состав, оценки пользователей.