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 2020 / All rights reserved

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