Практические примеры for/in циклов, использование оператора else
Перебор ключей и значений словаря, используя for/in в Python.
При итерации по элементам словаря for/in , ключ и соответствующее значение могут быть получены одновременно с использованием метода словаря dict.items() :
>>> knights = 'gallahad': 'the pure', 'robin': 'the brave'> >>> for k, v in knights.items(): . print(k, v) . # gallahad the pure # robin the brave
Смотрите материал «Сортировка словаря по значению и ключу в Python», чтобы перебрать его в отсортированном виде по ключам или значениям.
Варианты перебора списков, используя for/in в Python.
При итерации по последовательности с помощью инструкции for/in индекс позиции и соответствующее значение могут быть получены одновременно с помощью встроенной функции enumerate() .
>>> for i, v in enumerate(['tic', 'tac', 'toe']): . print(i, v) . # 0 tic # 1 tac # 2 toe
Перебор значений нескольких списков одновременно.
Чтобы выполнить цикл над двумя или более последовательностями одновременно, списки могут быть соединены с помощью встроенной функции zip() .
>>> questions = ['name', 'quest', 'favorite color'] >>> answers = ['lancelot', 'the holy grail', 'blue'] >>> for q, a in zip(questions, answers): . print('What is your ? It is .'.format(q, a)) . # What is your name? It is lancelot. # What is your quest? It is the holy grail. # What is your favorite color? It is blue.
>>> lst1 = [0, 1, 2, 3, 4, 5] >>> lst2 = [5, 3, 2, 0, 4, 1] >>> lst3 = ['zero', 'one', 'two', 'three', 'four', 'five'] >>> for a, b, c in zip(lst1, lst2, lst3): . print(f'c>:\ta> + b> = a + b>') . # zero: 0 + 5 = 5 # one: 1 + 3 = 4 # two: 2 + 2 = 4 # three: 3 + 0 = 3 # four: 4 + 4 = 8 # five: 5 + 1 = 6
Перебор значений списка в обратном порядке.
Чтобы выполнить цикл над последовательностью в обратном направлении используйте встроенную функцию reversed() .
>>> for i in reversed(range(1, 10, 2)): . print(i) . # 9 # 7 # 5 # 3 # 1
Перебор значений списка в отсортированном порядке.
Для циклического перебора последовательности в отсортированном порядке используйте встроенную функцию sorted() , которая возвращает новый отсортированный список, оставляя исходную последовательность неизменной.
>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana'] >>> for f in sorted(basket): . print(f) . # apple # banana # orange # pear
Изменение списка во время выполнения цикла.
Иногда возникает соблазн изменить список во время выполнения цикла. Не делайте этого, так как это может привести к непредсказуемым результатам. Зачастую проще и безопаснее создать список с новыми значениями, или по крайней мере изменяйте копию list.copy() исходного списка.
Пример, с созданием списка для новых значений.
>>> import math # не изменяйте исходный список во время итерации >>> raw_data = [56.2, float('NaN'), 51.7, 55.3, 52.5, float('NaN'), 47.8] # создаем список для отобранных значений >>> filtered_data = [] >>> for value in raw_data: . if not math.isnan(value): . filtered_data.append(value) . >>> filtered_data # [56.2, 51.7, 55.3, 52.5, 47.8]
Использование оператора else в циклах for/in .
Оператор else в циклах for/in выполняется только если цикл закончился и не прервался оператором break . Звучит как то бессмысленно. Как можно использовать такое поведение?
Цикл for/in/else упрощает любой цикл, который использует логический флаг, подобный этому:
# флаг принятия дальнейшего решения found = False for divisor in range(2, n): if n % divisor == 0: # если найден делитель, то меняем # флаг на `True` и выходим из цикла found = True break # принимаем решение на основе значения флага if found: print(n, 'is composite') else: print(n, 'is prime')
Оператор else в for/in позволяет опустить флаг и сделать код выше компактнее:
for divisor in range(2, n): if n % divisor == 0: print(n, 'is composite') break else: # else сработает, если цикл не завершиться # по `break`, т.е. преждевременно print(n, 'is prime')
Обратите внимание, что для кода, в котором принимается решение, что делать, уже есть естественное место для его выполнения (перед оператором break ). Единственная новая функция здесь — это место для выполнения кода, когда не нашлось ни одного делителя divisor .
Такое поведение for/in/else работает только в сочетании с оператором break . Но все равно нужны логические значения (флаги), если например, ищется последнее совпадение или необходимо отслеживать несколько условий параллельно.
Если единственной целью цикла for/in является ответ да или нет (флаг принятия решения), то можно написать его намного короче с помощью встроенных функций any() / all() и выражение-генератор, которое дает логические значения:
if any(n % divisor == 0 for divisor in range(2, n)): print(n, 'is composite') else: print(n, "is prime")
Этот код эффективен, как цикл с прерыванием, т.к. в функции any() происходит замыкание, а выражение-генератор выполняется только до тех пор, пока оно не вернет значение True . Этот код даже быстрее, чем цикл.
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Проверка условий, конструкция if/elif/else
- Конструкция if/else в одну строку
- Имитация оператора switch/case
- while, цикл по условию
- Цикл for
- Числовые последовательности для цикла Python
- Практическое применение for/in/else циклов
- Инструкции break, continue и блок else в циклах Python
- Оператор pass
- Конструкция match/case, сопоставление с образцом
Вывести массив в обратном порядке
Задана последовательность (массив) длины n из целых чисел: a0,a1,…,an−1. Выведите этот массив в обратном порядке.
Входные данные
В первой строке задано одно целое число n (1≤n≤2⋅104) — количество элементов в массиве. В следующей строке задано n целых чисел через пробел: a0,a1,…,an−1 (1≤a i ≤10 9 ) — элементы массива.
Выходные данные
Выведите n целых чисел через пробел — элементы массива в обратном порядке
Примеры
входные данные
5
1 2 3 4 5
выходные данные
5 4 3 2 1
входные данные
1
10
выходные данные
10
входные данные
10
3 6 1 5 4 5 1 10 15 3
выходные данные
3 15 10 1 5 4 5 1 6 3
Обязательно нужно ввести одномерный массив, с потом с ним работать
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Найти и вывести минимальный по модулю элемент Вывести массив на экран в обратном порядке
Пламенный привет, такая вот проблема ниже 🙂 нужно сделать на phyton Вариант 9 1. Дан.
Вывести массив в обратном порядке
Задан массив a1; a2; : : : ; an из целых чисел. Выведите его в обратном порядке. Формат входных.

Найти и вывести минимальный по модулю элемент массива, вывести массив на экран в обратном порядке
Дан одномерный массив, состоящий из N вещественных элементов. Ввести массив с клавиатуры. Найти и.

Найти максимальный элемент массива, и вывести массив на экран в обратном порядке
Дан одномерный массив, состоящий из N целочисленных элементов. Ввести массив с клавиатуры. Найти.
Вывести всех друзей в алфавитном порядке с их способами спасения в обратном алфавитном порядке
«Да, немного страшновато, — сказал Пятачок сам себе, — быть Очень Маленьким Существом, совершенно.
Выведите массив в обратном порядке
В этой задаче вы можете использовать одномерные массивы (или их аналоги), циклы и операторы ветвления. Запрещается использовать многомерные массивы, вложенные циклы и функции стандартной библиотеки работы с контейнерами.
Задана последовательность (массив) длины n из целых чисел: a0,a1,…,an−1. Выведите этот массив в обратном порядке.
Входные данные
В первой строке задано одно целое число n (1≤n≤2⋅104) — количество элементов в массиве. В следующей строке задано n целых чисел через пробел: a0,a1,…,an−1 (1≤ai≤109) — элементы массива.
Выходные данные
Выведите n целых чисел через пробел — элементы массива в обратном порядке
Примеры
входные данные
5
1 2 3 4 5
выходные данные
5 4 3 2 1
входные данные
1
10
выходные данные
10
входные данные
10
3 6 1 5 4 5 1 10 15 3
выходные данные
3 15 10 1 5 4 5 1 6 3
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Выведите строку в обратном порядке
Во входном файле записана одна текстовая строка, возможно, содержащая пробелы. Выведите эту строку.
Выведите последовательность в обратном порядке
Написать рекурсивную функцию. Дана последовательность целых чисел, заканчивающаяся числом 0.
Выведите последовательность в обратном порядке
Дана последовательность целых чисел, заканчивающаяся числом 0. Выведите эту последовательность в.

Выведите введенную строку в обратном порядке
9. Выведите введенную строку в обратном порядке. Использовать функцию "строка"
Перевернуть список
Потому что метод reverse переворачивает список, но ничего не возвращает.
>>> a = [1, 2, 3] >>> a [1, 2, 3] >>> a.reverse() >>> a [3, 2, 1]
если вы хотите чтобы функция возвращал перевернутый список не изменяя его — используйте функцию reversed (будьте внимательны, функция вернет итератор!)
>>> a = [1, 2, 3] >>> list(reversed(a)) [3, 2, 1] >>> a [1, 2, 3]
Отслеживать
ответ дан 21 фев 2014 в 8:35
4,666 16 16 серебряных знаков 15 15 бронзовых знаков
Можно копировать список целиком :: и итерировать в обратном порядке — к пр. так:
for i in a[::-1]: print i,"\n"
У print неявная конкатенация строк через запятую — туда можно и \n\n впихать, на версии 3 должно быть также.
В принципе, лучший ответ уже был дан — метод reversed (в противовес reverse()):
for i in reversed(a): print i
Также, если я такой уж многословный, возможно вам нужна разновидность списка (stack — first in last out):
a = [66.25] a.append(333) a.append(333) a.pop() 333 a.pop() 333 a.pop() 66.25
