Как сделать петлю назад в 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 ответов:
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'sxrange
.
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