итерация цикла python что это
Итераторы в Python
Концепция итераторов никоим образом не специфична для Python. В самом общем виде это объект, который используется для перебора в цикле последовательности элементов. Однако разные языки программирования реализуют данную концепцию по-разному или не реализуют вовсе. В Python каждый цикл for использует итератор, в отличие от многих других языков. В данной статье мы поговорим про итераторы в Python. Кроме того, мы рассмотрим итерируемые объекты (англ. iterables) и т.н. nextables.
Итерируемые объекты
Обратите внимание, что итерируемый объект не обязательно является итератором. Поскольку на самом деле сам по себе он не выполняет итерацию. У вас может быть отдельный объект-итератор, который возвращается из итерируемого класса, а не класс, обрабатывающий свою собственную итерацию. Но об этом позже.
Итераторы
Перейдем к собственно итераторам, рабочей лошадке итерации (особенно в Python). Итераторы – это уровень абстракции, который инкапсулирует знания о том, как брать элементы из некоторой последовательности. Мы намеренно объясняем это в общем виде, поскольку «последовательность» может быть чем угодно, от списков и файлов до потоков данных из базы данных или удаленного сервиса. В итераторах замечательно то, что код, использующий итератор, даже не должен знать, какой источник используется. Вместо этого он может сосредоточиться только на одном, а именно: «Что мне делать с каждым элементом?».
Марк Лутц «Изучаем Python»
Скачивайте книгу у нас в телеграм
Итерация без итератора
Чтобы лучше понять преимущества итераторов, давайте кратко рассмотрим итерацию без итераторов. Примером итерации без итератора является классический цикл for в стиле C. Этот стиль существует не только в C, но и, например, в C++, go и JavaScript.
Пример того, как это выглядит в JavaScript:
Здесь мы видим, что данный тип цикла for должен работать как с извлечением, так и с действиями для каждого элемента.
Все циклы for в Python используют итераторы
Сначала давайте посмотрим на Python-эквивалент предыдущего примера, наиболее близкий к нему синтаксически:
Если вы внимательно посмотрите на пример на JavaScript, вы увидите, что мы сообщаем циклу, когда нужно завершить ( i ), а также — как инкременировать ( i++ ). Итак, чтобы приблизить код Python к такому уровню абстракции, нам нужно написать что-то вроде этого:
Протокол итератора в Python
Отметим, nextable – это не часто используемый термин, потому что его можно запросто превратить в итератор. Как видите, метод __iter__ для итераторов легко реализовать. Фактически, в определении итератора явно указано, что должен делать метод:
Теперь давайте превратим это в итератор, сделав «некстабельным». Метод __next__ должен возвращать следующий объект в последовательности. Он также должен вызывать StopIteration при достижении конца последовательности (т.н. «исчерпание итератора»). То есть, в нашем случае — когда мы дошли до конца алфавита.
Хорошо, теперь давайте посмотрим на код нашего класса, а затем мы объясним, как он работает:
Теперь давайте попробуем сделать это через цикл for :
Мы обрезали вывод, потому что алфавит сейчас не так интересен, не правда ли? Этот итератор, как и следовало ожидать, совершенно бесполезен. Мы могли бы просто перебирать ascii_lowercase напрямую. Но, надеемся, на этом примере вы лучше разобрались в итераторах.
Nextables
Для этого удалим метод __iter__ из предыдущего примера, в результате чего получим следующее:
Python отделяет итератор от последовательности
Мы начали экспериментировать со встроенными последовательностями и сделали небольшое забавное открытие. В Python последовательности сами по себе не являются итераторами. Скорее у каждой есть соответствующий класс-итератор, отвечающий за итерацию. Давайте посмотрим на диапазон в качестве примера:
Просто для проверки используем next с range_iterator :
Создание отдельных Iterable и Nextable
Вооружившись этими новыми знаниями об отделении итерируемого объекта от итератора, мы придумали новую идею:
Итерация действительно проста:
Это просто оболочка для нашей следующей таблицы из примера nextable. Затем пишем цикл:
Однако такая установка хрупкая. Возвращаясь к нашему правильно реализованному итератору, этот код будет работать:
А код с нашей комбинацией iterable + nextable — нет:
Заключение
Давайте подведем итоги! Во-первых, теперь вы знаете, что все циклы for в Python используют итераторы! Кроме того, как мы увидели, итераторы в Python позволяют нам отделить код, выполняющий итерацию, от кода, работающего с каждым элементом. Мы также надеемся, что вы узнали немного больше о том, как работают итераторы в Python и что такое протокол итератора.
На этом пока все, и мы надеемся, вам понравился более глубокий взгляд на протокол итераторов в Python!
Понимание итераторов в Python
Особенности, с которыми вы часто можете столкнуться в повседневной деятельности
1. Использование генератора дважды
Как мы видим в этом примере, использование переменной squared_numbers дважды, дало ожидаемый результат в первом случае, и, для людей незнакомых с Python в достаточной мере, неожиданный результат во втором.
2. Проверка вхождения элемента в генератор
Возьмём всё те же переменные:
А теперь, дважды проверим, входит ли элемент в последовательность:
Получившийся результат также может ввести в заблуждение некоторых программистов и привести к ошибкам в коде.
3. Распаковка словаря
Для примера используем простой словарь с двумя элементами:
Результат будет также неочевиден, для людей, не понимающих устройство Python, «под капотом»:
Последовательности и итерируемые объекты
По-сути, вся разница, между последовательностями и итерируемымыи объектами, заключается в том, что в последовательностях элементы упорядочены.
Так, последовательностями являются: списки, кортежи и даже строки.
Отличия цикла for в Python от других языков
А с итерируемыми объектами, последовательностями не являющимися, не будет:
Цикл for использует итераторы
Как мы могли убедиться, цикл for не использует индексы. Вместо этого он использует так называемые итераторы.
Итераторы — это такие штуки, которые, очевидно, можно итерировать 🙂
Получить итератор мы можем из любого итерируемого объекта.
Для этого нужно передать итерируемый объект во встроенную функцию iter :
Реализация цикла for с помощью функции и цикла while
Чтобы сделать это, нам нужно:
Теперь мы знакомы с протоколом итератора.
А, говоря простым языком — с тем, как работает итерация в Python.
Функции iter и next этот протокол формализуют. Механизм везде один и тот же. Будь то пресловутый цикл for или генераторное выражение. Даже распаковка и «звёздочка» используют протокол итератора:
Генераторы — это тоже итераторы
Генераторы тоже реализуют протокол итератора:
В случае, если мы передаём в iter итератор, то получаем тот же самый итератор
Итератор не имеет индексов и может быть использован только один раз.
Протокол итератора
Теперь формализуем протокол итератора целиком:
Итераторы работают «лениво» (en. lazy). А это значит, что они не выполняют какой-либо работы, до тех пор, пока мы их об этом не попросим.
Таким образом, мы можем оптимизировать потребление ресурсов ОЗУ и CPU, а так же создавать бесконечные последовательности.
Итераторы повсюду
Мы уже видели много итераторов в Python.
Я уже упоминал о том, что генераторы — это тоже итераторы.
Многие встроенные функции является итераторами.
Так, например, enumerate :
Создание собственного итератора
Так же, в некоторых случаях, может пригодится знание того, как написать свой собственный итератор и ленивый итерируемый объект.
В моей карьере этот пункт был ключевым, так как вопрос был задан на собеседовании, которое, как вы могли догадаться, я успешно прошёл и получил свою первую работу:)
Таким образом мы написали бесконечный и ленивый итератор.
А это значит, что ресурсы он будет потреблять только при вызове.
Не говоря уже о том, что без собственного итератора имлементация бесконечной последовательности была бы невозможна.
А теперь вернёмся к тем особенностям, которые были изложены в начале статьи
1. Использование генератора дважды
В данном примере, список будет содержать элементы только в первом случае, потому что генераторное выражение — это итератор, а итераторы, как мы уже знаем — сущности одноразовые. И при повторном использовании не будут отдавать никаких элементов.
2. Проверка вхождения элемента в генератор
А теперь дважды проверим, входит ли элемент в последовательность:
В данном примере, элемент будет входить в последовательность только 1 раз, по причине того, что проверка на вхождение проверяется путем перебора всех элементов последовательности последовательно, и как только элемент обнаружен, поиск прекращается. Для наглядности приведу пример:
Как мы видим, при создании списка из генераторного выражения, в нём оказываются все элементы, после искомого. При повторном же создании, вполне ожидаемо, список оказывается пуст.
3. Распаковка словаря
Так как распаковка опирается на тот же протокол итератора, то и в переменных оказываются именно ключи:
Выводы
Последовательности — итерируемые объекты, но не все итерируемые объекты — последовательности.
Итераторы — самая простая форма итерируемых объектов в Python.
Любой итерируемый объект реализует протокол итератора. Понимание этого протокола — ключ к пониманию любых итераций в Python.
Цикл «for» в Python — универсальная управляющая конструкция
Применение циклов
Концепция циклов — это не просто очередная абстрактная выдумка программистов. Повторяющиеся раз за разом операции окружают нас и в реальной жизни:
🥣 добление щепотки приправ в варящийся бульон и помешивание его до тех пор, пока пакетик специй не закончится,
🕙 следование строгому расписанию каждый будний день, пока не наступят долгожданные выходные,
🌄 даже банальная смена времён год,
— всё это циклы, и представить нормальную жизнь без них попросту невозможно.
Впрочем, то же касается и программирования. Представьте, что вам нужно последовательно напечатать числа от 1 до 9999999999. В отсутствии циклов, эту задачу пришлось бы выполнять ручками, что потребовало бы колоссального количества кода и огромных временных затрат:
Циклы же позволяют уместить такую многокилометровую запись в изящную и простую для понимания конструкцию, состоящую всего из двух строчек:
for i in range(1, 10000000000): print(i)
Смысл её крайне прост. В основе цикла for лежат последовательности, и в примере выше это последовательность чисел от 1 до 9999999999. for поэлементно её перебирает и выполняет код, который записан в теле цикла. В частности, для решения данной задачи туда была помещена инструкция, позволяющая выводить значение элемента последовательности на экран.
Итерации
👉 Чтобы выполнить итерацию, Python делает следующее:
Пример создания итерируемого объекта Для того чтобы создать собственный класс итерируемого объекта, нужно всего лишь внутри него реализовать два метода: __iter__() и __next__() :
Создадим простой строковый итератор, который на каждой итерации, при получении следующего элемента (т.е. символа), приводит его к верхнему регистру:
class ToUpperCase: def __init__(self, string_obj, position=0): «»»сохраняем строку, полученную из конструктора, в поле string_obj и задаём начальный индекс»»» self.string_obj = string_obj self.position = position def __iter__(self): «»» возвращаем сам объект «»» return self def __next__(self): «»» метод возвращает следующий элемент, но уже приведенный к верхнему регистру «»» if self.position >= len(self.string_obj): # исключение StopIteration() сообщает циклу for о завершении raise StopIteration() position = self.position # инкрементируем индекс self.position += 1 # возвращаем символ в uppercase-e return self.string_obj[position].upper() low_python = «python» high_python = ToUpperCase(low_python) for ch in high_python: print(ch, end=»») > PYTHON
Синтаксис for
Как было замечено, цикл for python — есть средство для перебора последовательностей. С его помощью можно совершать обход строк, списков, кортежей и описанных выше итерируемых объектов.
В простейшем случае он выглядит так:
for item in collection: # do something
aliceQuote = «The best way to explain it is to do it.» # с помощью цикла for посчитаем количество символов (с пробелами) в строке # зададим счетчик count = 0 # будем посимвольно обходить весь текст for letter in aliceQuote: # на каждой новой итерации: # в переменной letter будет храниться следующий символ предложения; # увеличиваем счетчик на 1; count += 1 print(count) > 39
range() и enumerate()
Вы уже наверняка запомнили, что for работает с последовательностями. В программировании очень часто приходится повторять какую-то операцию фиксированное количество раз. А где упоминается «количество чего-то», существует и последовательность, числовая.
👉 Для того чтобы выполнить какую-либо инструкцию строго определенное число раз, воспользуемся функцией range() :
# скажем Миру привет целых пять раз! for i in range(5): print(«Hello World!») > Hello World! Hello World! Hello World! Hello World! Hello World!
range() можно представлять, как функцию, что возвращает последовательность чисел, регулируемую количеством переданных в неё аргументов. Их может быть 1, 2 или 3:
Здесь start — это первый элемент последовательности (включительно), stop — последний (не включительно), а step — разность между следующим и предыдущим членами последовательности.
# заменим каждый пятый символ предложения, начиная с 0-го, на * text = «Это не те дроиды, которых вы ищете» new_text = «» for char in enumerate(text): if char[0] % 5 == 0: new_text += ‘*’ else: new_text += char[1] print(new_text) > *то н* те *роид*, ко*орых*вы и*ете
break и continue
Два похожих оператора, которые можно встретить и в других языках программирования.
Здесь видно, как цикл, дойдя до числа 45 и вернув истину в условном выражении, прерывается и заканчивает свою работу.
# continue for num in range(40, 51): if num == 45: continue print(num) > 40 41 42 43 44 46 47 48 49 50
В случае continue происходит похожая ситуация, только прерывается лишь одна итерация, а сам же цикл продолжается.
group_of_students = [21, 18, 19, 21, 18] for age in group_of_students: if age Всё в порядке, они совершеннолетние
Best practice
Цикл по списку
Перебрать list в цикле не составляет никакого труда, поскольку список — объект итерируемый:
# есть список entities_of_warp = [«Tzeench», «Slaanesh», «Khorne», «Nurgle»] # просто берём список, «загружаем» его в цикл и без всякой задней мысли делаем обход for entity in entities_of_warp: print(entity) > Tzeench Slaanesh Khorne Nurgle
Так как элементами списков могут быть другие итерируемые объекты, то стоит упомянуть и о вложенных циклах. Цикл внутри цикла вполне обыденное явление, и хоть количество уровней вложенности не имеет пределов, злоупотреблять этим не следует. Циклы свыше второго уровня вложенности крайне тяжело воспринимаются и читаются.
Цикл по словарю
Цикл, в таком случае, будет выглядеть следующим образом:
Цикл по строке
Строки, по сути своей — весьма простые последовательности, состоящие из символов. Поэтому обходить их в цикле тоже совсем несложно.
word = ‘Alabama’ for w in word: print(w, end=» «) > A l a b a m a
Как сделать цикл for с шагом
# выведем числа от 100 до 1000 с шагом 150 for nums in range(100, 1000, 150): print(nums) > 100 250 400 550 700 850
Обратный цикл for
Если вы еще не убедились в том, что range() полезна, то вот ещё пример: благодаря этой функции можно взять и обойти последовательность в обратном направлении.
for в одну строку
Крутая питоновская фишка, основанная на так называемых list comprehensions или, по-русски, генераторов. Их запись, быть может, несколько сложнее для понимания, зато очевидно короче и, по некоторым данным, она работает заметно быстрее на больших массивах данных.
В общем виде генератор выглядит так:
[результирующее выражение | цикл | опциональное условие]
Приведем пример, в котором продублируем каждый символ строки inputString :
# здесь letter * 2 — результирующее выражение; for letter in inputString — цикл, а необязательное условие опущено double_letter = [letter * 2 for letter in «Banana»] print(double_letter) > [‘BB’, ‘aa’, ‘nn’, ‘aa’, ‘nn’, ‘aa’]
Другой пример, но теперь уже с условием:
# создадим список, что будет состоять из четных чисел от нуля до тридцати # здесь if x % 2 == 0 — необязательное условие even_nums = [x for x in range(30) if x % 2 == 0] print(even_nums) [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28]
11 Мощных методов Итерации по списку в Python
Итерация по списку в python означает прохождение каждого элемента по одному в данном списке. Мы узнаем 11 способов ее достижения.
11 Мощных методов Итерации по списку в Python
Здравствуйте, коллеги программисты в сегодняшней статье мы узнаем, как перебирать список в Python. Мы обсудим около 11 мощных способов итерации или циклического перебора списка с помощью Pytho n. Вы можете выбрать лучший метод в соответствии с вашими потребностями или эффективностью процесса. Так что давайте сразу перейдем к делу и начнем путешествие.
Если вы новичок в программировании, вы можете не знать о таких терминах, как итерация и списки. Так что для вас позвольте мне объяснить эти термины тоже на очень простом непрофессиональном языке.
Итерация: Часто в алгоритме набор операторов должен выполняться снова и снова, пока не будет выполнено определенное условие; именно здесь мы находим необходимость в итерации. Повторное выполнение нескольких групп операторов кода в программе называется итерацией.
List: В программировании на Python список создается путем помещения всех элементов (компонентов ) в квадратные скобки [], разделенные запятыми. Он может иметь любое количество вещей, и они могут быть разных типов (integer, float, string и т. Д.). Список может также иметь другой список как вещь. Это называется вложенным списком.
Надеюсь, вы понимаете, что такое список и итерация в python. Давайте рассмотрим 11 способов Перебирать список в Python, которые мы изучаем сегодня.
Способы Итерации по списку в Python
В этом уроке мы подробно обсудим все 11 способов перебора списка в python, которые заключаются в следующем:
1. Перебирайте список в Python, Используя For Loop2. Итерация по Списку в Python С Помощью While Loop3. Итерация по Списку в Python С Помощью Модуля Numpy4. Итерация по Списку в Python С Использованием Метода Enumerate5. Итерация по Списку в Python С Использованием Понимания списка6. Итерация по списку в Python С использованием цикла и диапазона7. Перебирайте список в Python С помощью Map и Lambda8. Перебирайте список в Python С помощью Iter() и Next()9. Перебирайте список в Python С Помощью zip()10. Перебирайте список в Python С помощью Itertools.Цикл11. Итерация по списку в Python с помощью Itertools Grouper
1. Итерация по Списку в Python с Помощью цикла For
Выполнение итерации в списке с использованием цикла for-это самый простой и основной способ достижения нашей цели. Как вы можете обнаружить в этой статье, используя какую-то поисковую систему, находя способ перебора списка в Python. Поэтому я предполагаю, что у вас уже есть базовые знания о петлях. Поэтому я не демонстрирую здесь циклы for.
Синтаксис
Пример
Выход
Объяснение
В приведенном выше примере программы мы сначала инициализировали и создали список с именем list. Список содержит шесть элементов, которые являются [9, 11, 13, 15, 17, 19] соответственно. А затем мы инициализировали простой цикл for в списке, который будет повторяться до конца списка и в конечном итоге печатать все элементы один за другим. Для печати в python мы просто используем функцию print (), как вы уже знаете.
2. Итерация по Списку в Python с Помощью цикла While
Второй способ перебора списка в python-это использование цикла while. В while loop способе итерации списка мы будем следовать аналогичному подходу, как мы наблюдали в нашем первом способе, то есть методу for-loop. Мы должны просто найти длину списка в качестве дополнительного шага.
Синтаксис
Пример
Выход
Объяснение
В приведенном выше примере программы мы сначала инициализировали и создали список с именем list. Список содержит шесть элементов, которые являются [9, 11, 13, 15, 17, 19] соответственно. После этого мы должны найти длину списка, найти длину списка в цикле while важно, потому что мы должны проверить условия. Как вы, возможно, уже знаете, цикл while проходит только в том случае, если условия истинны. Вот почему нам нужно найти длину списка, в данном случае длина равна шести, поэтому цикл будет повторяться шесть раз. И мы также объявили и инициализировали переменную ‘i’ с начальным значением ‘0’.
Переходя к циклу while, мы впервые проверили условие, которое истинно. Как и изначально, значение ‘i’ равно ‘0’, а длина списка равна ‘6’. Таким образом, он проверяет ‘0 nditer() – это вспомогательная функция, которая может использоваться от очень простых до очень продвинутых итераций. Это упрощает некоторые фундаментальные проблемы, с которыми мы сталкиваемся в итерации. href=”http://numpy.org/doc/stable/reference/generated/numpy.nditer.html”>nditer() – это вспомогательная функция, которая может использоваться от очень простых до очень продвинутых итераций. Это упрощает некоторые фундаментальные проблемы, с которыми мы сталкиваемся в итерации.
Нам также нужна другая функция для перебора списка в Python с помощью numpy, которая является numpy.arrange().numpy.arange возвращает равномерно распределенные значения в пределах заданного интервала. Значения генерируются в пределах полуоткрытого интервала [start, stop) (другими словами, интервала, включающего start, но исключающего stop).
Синтаксис:
Примеры
Давайте рассмотрим различные способы итерации по списку с помощью модуля numpy.
Пример 1:
Выход
Объяснение
В приведенном выше примере 1 программа np.arange(10) создает последовательность целых чисел от 0 до 9 и сохраняет ее в переменной x. После этого мы должны запустить цикл for, и, используя этот цикл for и np.nditer(x), мы будем перебирать каждый элемент списка один за другим.
Пример 2:
В этом примере мы будем итерировать 2d-массив с помощью модуля numpy. Для достижения нашей цели нам здесь нужны три функции.
Выход:
Объяснение:
Большая часть этого примера похожа на наш первый пример, за исключением того, что мы добавили дополнительную функцию numpy.reshape(). Функция numpy.reshape() обычно используется для придания формы нашему массиву или списку. В основном на непрофессиональном языке он преобразует размеры массива-как в этом примере мы использовали функцию reshape(), чтобы сделать массив numpy 2D-массивом.
4. Итерация по Списку в Python С Помощью Метода Enumerate
Четвертый способ в нашем списке-это итерация с использованием метода enumerate. Если вы не знаете, что именно enumerate делает в python, то позвольте мне объяснить вам.Метод enumerate() добавляет счетчик к итерируемому объекту и возвращает его. И что бы ни возвращал метод enumerate, это будет объект enumerate.
Основное преимущество использования метода enumerate заключается в том, что вы можете преобразовать объекты enumerate в list и tuple с помощью методов list() и tuple() соответственно.
Синтаксис
Метод enumerate() принимает два параметра:
Пример
Выход
Объяснение
Здесь, таким образом, для итерации списка мы использовали метод enumerate. Сначала мы инициализировали и создали список. Список содержит семь элементов. После создания списка мы используем цикл for здесь для циклического перебора каждого элемента списка. Переменная ‘i’ здесь используется для подсчета количества раз, когда выполняется цикл for. Функция enumerate(list) здесь будет перебирать каждый элемент в списке, а также выводить число, включающее индекс каждого элемента.
5. Итерация по Списку в Python С Использованием Понимания списка
В этом методе итерации мы будем использовать способ понимания списка. Понимание списка используется для создания мощной функциональности в одной строке кода.
Синтаксис
Понимание списка обычно состоит из трех параметров.
Пример
Выход
Объяснение
Это самый простой способ перебора списка, поскольку Python включает в себя простые и мощные инструменты, которые вы можете использовать в самых разных ситуациях. Здесь, в этом примере, print(i) является выражением. Второй ‘i’ – это элемент, который является значением iterable. И, наконец, итерируемый, в приведенном выше примере итерируемый-это список.
6. Итерация по списку в Python С использованием цикла и диапазона
Шестой метод итерации по списку – это использование диапазона и любого цикла в Python. Метод range можно использовать как комбинацию с циклом for для обхода и итерации по списку. Функция range() возвращает последовательность цифр, начинающуюся с 0 (по умолчанию) и по умолчанию увеличивающуюся на 1, и останавливается перед указанным числом.
Синтаксис
начало | (Необязательно). Конкретное число, с которого нужно начать. Значение по умолчанию равно 0 |
остановка | (Обязательно). Номер, указывающий, в какой позиции остановиться (не входит в комплект). |
шаг | (Необязательно). шаг используется для указания приращения. Значение по умолчанию-1. |
Примечание: Метод range не включает стоп-номер в результирующую последовательность.
Пример
Выход
Объяснение
Здесь в приведенном выше примере сначала мы инициализировали и создали список с элементами [10, 20, 30, 40, 50, 60, 70]. После этого мы должны найти длину списка с помощью функции len. Список длины равен 7, поэтому теперь значение переменной length равно 7.
7. Перебирайте список в Python С помощью Map и Lambda
Лямбда-функция-это анонимная функция в Python. С помощью лямбда-функции мы можем взять n количество аргументов, но будет только одно выражение. Сила лямбды лучше проявляется, когда вы используете их как анонимную функцию внутри другой функции.
Функция map() выполняет указанную функцию в итеративном режиме.
Синтаксис
Здесь выражение будет выполнено, и результат будет возвращен. аргументы: может быть n аргументов числа.
Синтаксис функции map ()
функция | Требуемый. |
итерируемый | Требуемый. Последовательность списка, коллекции или объекта итератора. |
Пример
Выход
Объяснение
В приведенном выше примере мы использовали комбинацию функций lambda и map для итерации списка. Здесь lambda y:y предоставляется в качестве входной функции, а ‘n’ является вторым аргументом функции map (). Таким образом, функция map() передаст каждый элемент n в функцию lambda y:y и вернет элементы.
8. Повторите список в Python с помощью zip()
Если вы хотите перебирать два списка одновременно, вы можете использовать метод zip() в Python. Таким образом, функция zip() создает итератор, который будет агрегировать элементы из двух или более итераций.
Функция zip() в Python генерирует объект zip, который является итератором кортежей.
Синтаксис
итератор1, итератор2, итератор3 … | Объекты итератора, которые будут объединены вместе |
Пример
Выход
Объяснение
В приведенном выше примере мы перебираем серию кортежей, возвращаемых zip(), и распаковываем элементы в a и b. Параметры функции zipping () в данном случае являются (num, daypart) и они будут агрегированы вместе.
При объединении zip(), для Циклы и распаковка кортежей позволяют одновременно проходить две или более итераций.
9. Выполните Итерацию списка в Python С помощью итераторов – Iter() и Next()
Для итерации списка с помощью итераторов в python мы будем использовать методы __iter()__ и __next ()__. В Python __iter__() и __next__() совместно известны как протокол итератора.
Итераторы обычно реализуются в циклах, постижениях, генераторах и т. Д. Это просто объект, который может быть повторен (по одному элементу за раз). Внутренне цикл for создает объект iterator, iter_obj, вызывая iter() для iterable.
Синтаксис
Синтаксис функции __iter ()__
Здесь iterable может быть списком, кортежем, строкой и т. Д. Функция iter() (которая вызывает метод __iter__()) возвращает итератор.
Синтаксис функции __next ()__
Next(Iter_obj) – это то же самое, что obj.next(). Здесь iter_obj может быть любым итеративным объектом, созданным функцией iter ().
Пример
Выход
Объяснение
В приведенном выше примере сначала мы создали итеративный (список) с элементами [10, 20, 30, 40, 50, 60, 70]. Затем мы получаем итератор с помощью функции iter() и сохраняем его в переменной iter_obj. После этого мы инициализировали бесконечный цикл while и использовали функцию next() для перебора всех элементов итератора. Когда мы дойдем до конца и больше не будем возвращать данные, это вызовет исключение StopIteration.
Внутренне цикл for создает объект итератора iter_obj, вызывая iter() на итераторе. Но на практике цикл for на самом деле является бесконечным циклом while.
10. Выполните Итерацию списка в Python С Помощью Itertools.Цикл
Itertools-это библиотека, которая создает эффективные итераторы. Эти итераторы работают быстрее, чем обычная итерация. В этом разделе мы будем использовать itertools.cycle для выполнения итерации по списку. Эта функция цикла возвращает бесконечный итератор, который повторяет список снова и снова. Мы настроим это на повторение только один раз.
Синтаксис
Здесь iterable может быть списком, кортежем, строкой и т. Д. Метод itertools.cycle() возвращает бесконечный итератор.
Пример
Выход
Объяснение
В приведенном выше примере мы сначала импортировали itertools. Затем мы использовали метод itertools.cycle() для создания бесконечного итератора. Затем мы ограничиваем количество раз, когда мы проходим через итератор, используя счетчик. После этого с помощью цикла while перебирайте итератор и увеличивайте количество в каждом цикле. Это гарантирует, что наш итератор не будет бесконечно петлять.
Itertools.cycle в основном используется для создания бесконечно циклического итератора. Это очень полезно в сценариях, где вам нужно создать бесконечный цикл без использования while.
11. Итерация по Списку в Python С помощью Itertools Grouper
В этом разделе используйте itertools.zip_longest для создания группера. Grouper-это функция, с помощью которой мы можем группировать элементы списка и перебирать их. Это может быть полезно, если вы хотите повторить 2-3 элемента в каждой партии вашей итерации.
Синтаксис
iterable_object | Требуемый. Последовательность списка, коллекции или объекта итератора. |
считать | Требуемый. Количество элементов, группируемых в пакет. |
fillvalue | Необязательный. Значение заполнения для заполнения пакета, если итератор закончил работу до заполнения пакета. |
Пример
Выход
Объяснение
В этом примере мы сначала импортировали модуль zip_longest из itertools. zip_longest – это метод, который агрегирует элементы из каждой итерации. Затем мы создаем функцию grouper. Эта функция принимает итерацию в качестве аргумента и количество элементов для группировки вместе. В этом случае, поскольку мы хотим выполнить итерацию по всему списку, мы сохраним значение count равным 1. 3-й аргумент-fillvalue, этот аргумент используется для заполнения оставшихся значений, если пакет меньше, чем count.Затем мы вызовем функцию grouper get iterable. Мы будем перебирать этот итератор, чтобы получить отдельные элементы из списка.
Примечание: Не забудьте распаковать элемент с помощью*, потому что zip_longest возвращает итератор кортежей.
Вывод: Python Перебирает Список
Поэтому, если вы сделаете это до конца, я почти уверен, что теперь вы сможете понять все возможные способы перебора списка в Python. Наилучший способ итерации Python по списку зависит от ваших потребностей и типа проекта, который вы делаете. Я думаю, что вы также можете захотеть узнать, как в Python сортировать список списков. Если да, то в нашей библиотеке учебников есть потрясающий учебник, проверьте его.
Все еще есть какие-либо сомнения или вопросы, дайте мне знать в разделе комментариев ниже. Я постараюсь помочь вам как можно скорее.