Как петля назад в python?
Я говорю о том, чтобы сделать что-то вроде:
for(i=n; i>=1; --i) {
//do something with i
}
Я могу подумать о некоторых способах сделать это в python (создав список range(1,n+1)
и отменив его, используя while
и --i
,...), но я подумал, есть ли более элегантный способ сделать Это. Есть?
EDIT:
Некоторые предложили использовать xrange() вместо range(), поскольку диапазон возвращает список, а xrange возвращает итератор. Но в Python 3 (который я использую) range() возвращает итератор, а xrange не существует.
Ответы
Ответ 1
range()
и xrange()
принимают третий параметр, который определяет шаг. Таким образом, вы можете сделать следующее.
range(10, 0, -1)
Который дает
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Но для итерации вы должны использовать xrange
. Так,
xrange(10, 0, -1)
Примечание для пользователей Python 3: в Python 3 нет отдельных функций range
и xrange
, есть только range
, который соответствует дизайну xrange
Python 2.
Ответ 2
for x in reversed(whatever):
do_something()
Это работает в основном со всем, что имеет определенный порядок, включая xrange
объекты и списки.
Ответ 3
Все эти три решения дают одинаковые результаты, если ввод представляет собой строку:
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))
Ответ 4
def reverse(text):
reversed = ''
for i in range(len(text)-1, -1, -1):
reversed += text[i]
return reversed
print("reverse({}): {}".format("abcd", reverse("abcd")))
Ответ 5
Чтобы отменить строку без использования 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