Как сделать петлю назад в python? [дубликат]


этот вопрос уже есть ответ здесь:

Я говорю о том, чтобы сделать что-то вроде:

for(i=n; i>=1; --i) {
   //do something with i
}

Я могу придумать несколько способов сделать это в Python (создание списка range(1,n+1) и переверните его, используя while и --i, ...) но мне было интересно, если есть более элегантный способ сделать это. Есть ли?

изменить: Некоторые предложили использовать xrange() вместо range (), поскольку range возвращает список, а xrange возвращает итератор. Но в Python 3 (который я использую) range () возвращает итератор, а xrange не существует.

5 123

5 ответов:

range() и xrange() принимать третий параметр, который определяет шаг. Таким образом, вы можете сделать следующее.

range(10, 0, -1)

что дает

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1] 

но для итерации, вы действительно должны использовать xrange вместо. Итак,

xrange(10, 0, -1)

Примечание Для пользователей Python 3: нет отдельных range и xrange функции в Python 3, есть только range, который следует за дизайном Python 2's xrange.

for x in reversed(whatever):
    do_something()

это работает в принципе все, что имеет определенный порядок, в том числе xrange объекты и списки.

все эти три решения дают одинаковые результаты, если входной является строка:

1.

def reverse(text):
    result = ""
    for i in range(len(text),0,-1):
        result += text[i-1]
    return (result)

2.

text[::-1]

3.

"".join(reversed(text))
def reverse(text):
    reversed = ''
    for i in range(len(text)-1, -1, -1):
        reversed += text[i]
    return reversed

print("reverse({}): {}".format("abcd", reverse("abcd")))

чтобы отменить строку без использования reversed или [::-1] попробуйте что-то вроде:

def reverse(text):
    # Container for reversed string
    txet=""

    # store the length of the string to be reversed
    # account for indexes starting at 0
    length = len(text)-1

    # loop through the string in reverse and append each character
    # deprecate the length index
    while length>=0:
        txet += "%s"%text[length]
        length-=1
    return txet