Обратный цикл фор питон

PEP 322 – Reverse Iteration

This proposal is to add a builtin function to support reverse iteration over sequences.

Motivation

For indexable objects, current approaches for reverse iteration are error prone, unnatural, and not especially readable:

for i in xrange(n-1, -1, -1): print seqn[i] 

One other current approach involves reversing a list before iterating over it. That technique wastes computer cycles, memory, and lines of code:

rseqn = list(seqn) rseqn.reverse() for value in rseqn: print value 

Extended slicing is a third approach that minimizes the code overhead but does nothing for memory efficiency, beauty, or clarity.

Reverse iteration is much less common than forward iteration, but it does arise regularly in practice. See Real World Use Cases below.

Proposal

Add a builtin function called reversed() that makes a reverse iterator over sequence objects that support __getitem__() and __len__().

The above examples then simplify to:

for i in reversed(xrange(n)): print seqn[i] 
for elem in reversed(seqn): print elem 

The core idea is that the clearest, least error-prone way of specifying reverse iteration is to specify it in a forward direction and then say reversed.

The implementation could be as simple as:

def reversed(x): if hasattr(x, 'keys'): raise ValueError("mappings do not support reverse iteration") i = len(x) while i > 0: i -= 1 yield x[i] 

No language syntax changes are needed. The proposal is fully backwards compatible.

A C implementation and unit tests are at: https://bugs.python.org/issue834422

BDFL Pronouncement

This PEP has been conditionally accepted for Py2.4. The condition means that if the function is found to be useless, it can be removed before Py2.4b1.

Alternative Method Names

  • reviter – Jeremy Fincher’s suggestion matches use of iter()
  • ireverse – uses the itertools naming convention
  • inreverse – no one seems to like this one except me

The name reverse is not a candidate because it duplicates the name of the list.reverse() which mutates the underlying list.

Discussion

The case against adoption of the PEP is a desire to keep the number of builtin functions small. This needs to weighed against the simplicity and convenience of having it as builtin instead of being tucked away in some other namespace.

Real World Use Cases

Here are some instances of reverse iteration taken from the standard library and comments on why reverse iteration was necessary:

while _exithandlers: func, targs, kargs = _exithandlers.pop() . . . 
testfolders.reverse(); for t in testfolders: do('mh.deletefolder(%s)' % `t`)
list.reverse() for i in list: del self.headers[i] 

Rejected Alternatives

Several variants were submitted that attempted to apply reversed() to all iterables by running the iterable to completion, saving the results, and then returning a reverse iterator over the results. While satisfying some notions of full generality, running the input to the end is contrary to the purpose of using iterators in the first place. Also, a small disaster ensues if the underlying iterator is infinite.

Читайте также:  Java сколько выделять памяти

Putting the function in another module or attaching it to a type object is not being considered. Like its cousins, zip() and enumerate(), the function needs to be directly accessible in daily programming. Each solves a basic looping problem: lock-step iteration, loop counting, and reverse iteration. Requiring some form of dotted access would interfere with their simplicity, daily utility, and accessibility. They are core looping constructs, independent of any one application domain.

This document has been placed in the public domain.

Источник

BreakingCode

Красивый Питон — часть 1. Правильные циклы в Python.

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

циклы в python

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

Как не надо писать циклы FOR на Python?

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

Цикл по диапазону значений в Python

Одним из самых распространенных является цикл перебора некоторого диапазона значений. Что-то типа от 0 до 1000, от 1 до 99 — в общем, какие угодно диапазоны. Хороший способ использовать циклы в Python показан ниже.

#Вот так делать не надо! for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]: #бла-бла #А вот так надо. Это же классно! for i in range(11): #бла-бла

В примере используется функция range(). В нее надо передавать значение, до которого будет идти перебор. При этом само значение включено не будет. В функцию можно передавать начало, конец и даже шаг перебора в качестве аргументов.

Цикл с использованием индексов и значений в Python

Еще одним частым применением циклов является цикл по последовательностям, в которых используются пары «индекс-значение».

#Вот так не нужно делать for i in range(len(array)): #действия с i #действия с array[i] #А так нужно, да и еще и удобно! for i, val in enumerate(array): #действия с i #действия val

Используемая функция enumerate() возвращает кортеж, состоящий из пар «индекс-значение». В примере это i и val. Еще функция умеет смещаться — для этого нужно передать ей индекс, с которого нужно начать перебор.

Читайте также:  Python telegram bot напоминалка

Цикл в обратном порядке в Python

И последнее, что рассмотрим в этой статье — это цикл по последовательности в обратном порядке. Циклы в Python конечно-же можно строить и с конца последовательности, постепенно приближаясь к ее началу. Только делать это нужно правильно.

#Вот так в обратном порядке последовательность не перебирают for val in range(len(array) - 1, -1, -1): #действия #А вот так перебирают. Оцените удобство! for val in reversed(array) #действия

Функция reversed() просто перебирает последовательность в обратном порядке. Большего о ней рассказать нельзя. Берет последовательность, перебирает с конца, и точка.

На этом все. В статье показаны три общие идиомы для циклов, которые вероятно помогут вам сделать код лаконичнее и читабельней. Согласитесь, это: reversed(array) понять гораздо проще, чем это: range(len(array) -1, -1, -1).

Спасибо Jamal Moir за замечательные советы.

Похожие посты:

Источник

Итерация списка в Python в обратном направлении

Итерация списка в Python в обратном направлении

  1. Используйте функцию reversed() для обхода списка в обратном порядке в Python
  2. Используйте функцию range() для обхода списка в обратном порядке в Python
  3. Используйте цикл for для обхода списка в обратном порядке в Python

В этом руководстве будут рассмотрены различные методы, доступные для обхода списка в обратном порядке в Python.

Используйте функцию reversed() для обхода списка в обратном порядке в Python

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

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

x = ["my", "unlimited", "sadness"] for i in reversed(x):  print(i) 

Однако, чтобы также получить доступ к исходному индексу последовательности, мы можем дополнительно использовать функцию enumerate() в нашем списке, прежде чем передавать ее в функцию reversed() .

x = ["my", "unlimited", "sadness"] for i, e in reversed(list(enumerate(x))):  print(i, e) 
2 sadness 1 unlimited 0 my 

Следовательно, мы получаем результат с исходным индексом последовательности. Однако стоит отметить, что enumerate() возвращает генератор, и генераторы не могут быть отменены. Поэтому очень важно сначала преобразовать его в список.

Используйте функцию range() для обхода списка в обратном порядке в Python

Другой метод обхода последовательности в обратном порядке в Python — использование доступной функции range .

Функция range , доступная в Python, возвращает последовательность чисел, начиная с 0 по умолчанию, которая автоматически увеличивается на дополнительную 1 (по умолчанию).

Функция range принимает три разных параметра — start (необязательно), stop (обязательно), step (необязательно). Все три параметра принимают на вход целое число.

x = ["my", "unlimited", "sadness"] for i in range(len(x)-1, -1, -1):  print(i, x[i]) 
3 sadness 2 unlimited 1 my 

Следовательно, как показано выше, мы можем пройти последовательность в обратном порядке с исходным индексом последовательности.

Используйте цикл for для обхода списка в обратном порядке в Python

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

Читайте также:  Pdo php проверить соединение

Мы можем использовать его для просмотра списка в обратном порядке, как показано ниже.

x = ["my", "unlimited", "sadness"] for item in x[::-1]:  print(item) 

Обратите внимание, что [::-1] в приведенном выше коде только нарезает список в обратном порядке только для цикла. Следовательно, он не изменяет и не модифицирует массив данных или список, предоставляемый постоянно.

Сопутствующая статья — Python List

Copyright © 2023. All right reserved

Источник

Reverse for loop Python

In this tutorial, you will learn how to use for loop in reverse order in Python.

In python, for loop is used to iterate over a sequence (list, tuple, string) or other iterable objects. By default, the for loop iterates over the sequence in ascending order. Means it starts from the first element and ends at the last element.

However, you can also iterate over a sequence in reverse order. Starting from the last element and ending at the first element.

reverse for loop python

There can be multiple different approaches to iterate over a sequence in reverse order. Let’s see them one by one.

1. Using reversed() function

The reversed() function returns a reverse iterator which can be used to iterate over a sequence in reverse order.

Here is an example of how to use reversed() function in for loop.

my_list = [1, 2, 3, 4, 5] # Iterate over the elements of the list in reverse order for element in reversed(my_list): print(element)

Here, we have created a list of numbers. Then we used reversed() function to iterate over the elements of the list in reverse order.

Note the original list is not modified by the reversed() function.

2. Reverse loop using negative step

Another way to create a reverse loop in Python is to use the built-in range() function with a negative step value.

For example range(5, 0, -1) will return a list of numbers from 5 to 1 in reverse order.

# reverse for loop for i in range(5, 0, -1): print(i)

Here, the range() function starts at 5 and ends at 1. The step value is -1. So, effectively it iterates over the sequence in reverse order.

Another way of reversing the loop with a negative step is by using the len() function within the range() function as follows.

my_list = [1, 2, 3, 4, 5] # Iterate over the elements of the list in reverse order for i in range(len(my_list)-1, -1, -1): print(my_list[i])

Here, we have used len() function to get the length of the list. Then we used the length of the list as the starting point of the range() function. The step value is -1. So, effectively it iterates over the sequence in reverse order.

This is all about for loop in reverse order in python. Hope you have learned something new today.

Источник

Оцените статью