Share This
Связаться со мной
Крути в низ
Categories
//Встроенные функции для перебора последовательностей в Python

Встроенные функции для перебора последовательностей в Python

08.11.2021Category : Python

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

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

Как перебрать последовательность с помощью функции enumerate() в Python

Функция enumerate() перебирает последовательность (список, кортеж, строку или словарь), одновременно отслеживая значения индексов элементов последовательности.

Давайте посмотрим на синтаксис:

enumerate(iterable, start)

Функция принимает два аргумента:

  • iterable – итерируемый объект (т.е. объект, который можно перебрать в цикле).
  • start – значение индекса или начальное значение счетчика. По умолчанию данный аргумент равен нулю.

Результат работы такой функции будет следующим:

# Output # [(0, item_1), (1, item_1), (2, item_2), . . ., (n, item_n)]

Мы получили элементы итерируемого объекта вместе с их индексами.

Возьмем пример без указания значения start:

colour = ["Black", "Purple", "Brown", "Yellow", "Blue"] list(enumerate(colour))  # Output: # [(0, 'Black'), (1, 'Purple'), (2, 'Brown'), (3, 'Yellow'), (4, 'Blue')]

Как видите, индексирование начинается с 0, хотя мы не указывали второй аргумент при вызове функции. Всё потому, что по умолчанию значение аргумента start равно 0.

Возьмем еще один пример с указанием индекса:

colour = ["Black", "Purple", "Brown", "Yellow", "Blue"] list(enumerate(colour, 10))  # Output: # [(10, 'Black'), (11, 'Purple'), (12, 'Brown'), (13, 'Yellow'), (14, 'Blue')]

Итак, здесь наш индекс начинается с 10, поскольку мы устанавливаем аргумент start равным 10. В результате функция начинает отсчет индексов с 10.

Обратите внимание, что нужно явно указывать, хотите вы получить результат в виде списка или в виде кортежа. В нашем коде мы указывали, что хотим получить список — list(enumerate(colour, 10)). Если просто вызвать функцию enumerate(), результат будет следующим:

colour = ["Black", "Purple", "Brown", "Yellow", "Blue"] enumerate(colour)  # Output: # <enumerate object at 0x7f6a97ad7c40>

Возьмем пример со словарем:

colour = {"Black": 0,            "Purple": 2,            "Brown": 4,            "Yellow": 9,            "Blue": 1} list(enumerate(colour))  # Output: # [(0, 'Black'), (1, 'Purple'), (2, 'Brown'), (3, 'Yellow'), (4, 'Blue')]

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

vstroennye funkcii dlja perebora posledovatelnostej v python 6fc1d45 - Встроенные функции для перебора последовательностей в Python

Марк Лутц «Изучаем Python»

Скачивайте книгу у нас в телеграм

Скачать ×

Функции для перебора элементов словаря в Python

Для перебора словаря и получения значений в Python есть две встроенные функции:

  • items() – эта функция помогает нам получать пары ключ-значение из словаря.
  • values() – данная функция помогает нам получать только значения из словаря, без ключей.

Давайте рассмотрим примеры работы функции items():

colour = {"Black": 0,            "Purple": 2,            "Brown": 4,            "Yellow": 9,            "Blue": 1} list(enumerate(colour.items()))  # Output: # [(0, ('Black', 0)), (1, ('Purple', 2)), (2, ('Brown', 4)), (3, ('Yellow', 9)), (4, ('Blue', 1))]

items() также можно использовать с циклом for:

colour = {"Black": 0,            "Purple": 2,            "Brown": 4,            "Yellow": 9,            "Blue": 1} for ind, (keys, value) in enumerate(colour.items()): 	print(ind, keys, value)  # Output: # 0 Black 0 # 1 Purple 2 # 2 Brown 4 # 3 Yellow 9 # 4 Blue 1

В этом примере мы получаем пары ключ-значение.

Теперь давайте воспользуемся функцией values():

colour = {"Black": 0,            "Purple": 2,            "Brown": 4,            "Yellow": 9,            "Blue": 1} list(enumerate(colour.values()))  # Output: # [(0, 0), (1, 2), (2, 4), (3, 9), (4, 1)]

С циклом for наш код будет выглядеть так:

colour = {"Black": 0,            "Purple": 2,            "Brown": 4,            "Yellow": 9,            "Blue": 1} for ind, value in enumerate(colour.values()):     print(ind, value)  # Output: # 0 0 # 1 2 # 2 4 # 3 9 # 4 1

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

Как перебрать последовательность с помощью функции zip() в Python

Функция zip() принимает несколько итерируемых объектов с одинаковыми значениями индексов, объединяет их и возвращает итератор. Итератором может быть кортеж, список или словарь.

Посмотрим на синтаксис:

zip(*iterables)

или

zip(iterator1, iterator2, … и так далее)

Какие аргументы у функции zip()? Данная функция принимает итерируемые объекты. Это могут быть списки, кортежи, строки, множества или словари.

К примеру, функцию zip() можно использовать так:

color = ["Blue", "Orange", "Brown", "Red"] code = [20, 10, 56, 84] list(zip(color, code))  # Output: # [('Blue', 20), ('Orange', 10), ('Brown', 56), ('Red', 84)]

Здесь два списка объединяются, и в результате мы получаем итератор.

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

Возьмем пример:

color = ["Blue", "Orange", "Brown"] code = [20, 10, 56, 84] list(zip(color, code))  # Output: # [('Blue', 20), ('Orange', 10), ('Brown', 56)]

Здесь самая короткая длина у списка color. Поэтому мы получаем на выходе 3 цвета и 3 кода. Четвертый же код игнорируется.

В Python 3.10 появился новый параметр strict, который проверяет длину элементов. Его использование выдаст нам ошибку, если длины элементов не совпадают. Рассмотрим пример:

color = ("Blue", "Orange", "Brown", "Purple") code = (20, 10, 56) for col, cod in zip(color, code, strict=True):     print(col, cod)  # Output: # Blue 20 # Orange 10 # Brown 56 # Traceback (most recent call last): #   File "<pyshell#14>", line 1, in <module> #     for col, cod in zip(color, code, strict=True): # ValueError: zip() argument 2 is shorter than argument 1

Итерируемых объектов может быть не два, а больше. Разберем пример с тремя:

Abbreviation = ['Bl', 'Or', 'Br', 'Gn'] Color = ['Blue', 'Orange', 'Brown', 'Green'] Code = [20, 10, 56, 88] for ab, col, cod in zip(Abbreviation, Color, Code): 	print(ab, col, cod)  # Output: # Bl Blue 20 # Or Orange 10 # Br Brown 56 # Gn Green 88

Используя функцию zip() с функцией dict(), можно создать словарь:

Color = ['Blue', 'Orange', 'Brown', 'Green'] Code = [20, 10, 56, 88] dict(zip(Color, Code))  # Output: # {'Blue': 20, 'Orange': 10, 'Brown': 56, 'Green': 88}

Как перебрать последовательность с помощью функции sorted() в Python

Функция sorted() возвращает элементы итерируемого объекта в отсортированном порядке.

Синтаксис данной функции выглядит следующим образом:

sorted(iterable, key=key, reverse=reverse)

Функция принимает три аргумента:

  • iterable – итерируемый объект (список, кортеж, строка и т.д.)
  • key – опциональный аргумент. В качестве key можно передать функцию для настройки порядка сортировки. Значение параметра по умолчанию – None.
  • reverse – тоже не обязателен. Значением reverse может быть True или False. По умолчанию используется False, т.е. сортировка происходит в порядке возрастания. Если вы укажете reverse=True, то сортировка будет в порядке убывания.

Рассмотрим пример:

Color = ['Blue', 'Orange', 'Brown', 'Green'] sorted(Color)  # Output: # ['Blue', 'Brown', 'Green', 'Orange']

По умолчанию наш вывод будет списком элементов в возрастающем порядке. Строки сортируются в алфавитном порядке, числа — по возрастанию.

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

Color = ('Blue', 'Orange', 'Brown', 'Green') sorted(Color, reverse=True)  # Output: # ['Orange', 'Green', 'Brown', 'Blue']

Исходный объект остается неизменным, поскольку функция sorted() не изменяет исходные значения. Она ​​только выводит результат сортировки на экран. Результатом будет упорядоченный список.

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

Давайте рассмотрим случай со встроенной функцией.

Word = ('TO', 'is', 'apple', 'PEAR', 'LIKE') sorted(Word, key=str.upper)  # Output: # ['apple', 'is', 'LIKE', 'PEAR', 'TO']

По умолчанию вывод будет в возрастающем порядке. Для изменения порядка следует добавить reverse=True:

Word = ('TO', 'is', 'apple', 'PEAR', 'LIKE') sorted(Word, key=str.upper, reverse=True)  # Output: # ['TO', 'PEAR', 'LIKE', 'is', 'apple']

В качестве параметра key можно использовать не только встроенные функции. Давайте рассмотрим случай с пользовательской:

numb = (22, 10, 5, 34, 29) sorted(numb, key=lambda x: x%5)  # Output: # [10, 5, 22, 34, 29]

Мы использовали лямбда-функцию для простоты, но вы можете использовать и традиционный метод определения функции.

Как перебрать последовательность с помощью функции reversed() в Python

Функция reversed() возвращает элементы итерируемого объекта в обратном порядке.

Синтаксис этой функции следующий:

reversed(iterable)

Аргумент iterable – это итерируемый объект (список, кортеж, множество и т.д.).

Возьмем пример:

numb = (22, 10, 5, 34, 29) list(reversed(numb))  # Output: # [29, 34, 5, 10, 22]

Как и в случае с enumerate(), при использовании reversed() нужно явно указывать, хотите вы получить на выходе список или кортеж. Если просто вызвать эту функцию, она выдаст вам следующее:

numb = (22, 10, 5, 34, 29) reversed(numb)  # Output: # <reversed object at 0x000001C1E7D9E110>

Заключение

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

Перевод статьи «How to Use Built-in Looping Functions in Python».

  • 0 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Свежие комментарии

    Рубрики

    About Author 01.

    blank
    Roman Spiridonov

    Моя специальность - Back-end Developer, Software Engineer Python. Мне 39 лет, я работаю в области информационных технологий более 5 лет. Опыт программирования на Python более 3 лет. На Django более 2 лет.

    Categories 05.

    © Speccy 2022 / All rights reserved

    Связаться со мной
    Close