Я могу ошибаться (просто дайте мне знать, и я удалю вопрос), но кажется, что python не отвечает на
for n in range(6,0):
print n
Я пробовал использовать xrange, и это тоже не сработало. Как я могу это реализовать?
Я могу ошибаться (просто дайте мне знать, и я удалю вопрос), но кажется, что python не отвечает на
for n in range(6,0):
print n
Я пробовал использовать xrange, и это тоже не сработало. Как я могу это реализовать?
for i in reversed(mat):хотя это может быть медленнее
Ответы:
Это очень поздно, но я просто хотел добавить, что есть более элегантный способ: использовать reversed
for i in reversed(range(10)):
print i
дает:
4
3
2
1
0
reversed(range)бесплатно благодаря хорошей range_reverseоптимизации, встроенной в CPython. Я сделал несколько быстрых тестов и не смог найти существенную разницу стоимости между step=-1и reversed()в обоих Python 2.7 и 3.3. Также обратите внимание, что эта идиома используется в heapq .
xrangeв своих тестах Python 2.7, reverseбудет работать с обычным, уже сгенерированным списком, а не с объектом диапазона; Так вы говорите, что любой список можно эффективно перевернуть, или просто range/xrangeобъекты? (код heapq, на который вы ссылаетесь, включает объект диапазона Python 3).
reversed(range(10))не может выходить 4через 0. Может, вы имели в виду range(5)?
for n in range(6,0,-1)
Это даст вам 6,5,4,3,2,1
Что касается
for n in reversed(range(0,6))
дал бы вам 5,4,3,2,1,0
Поздно к вечеринке, но для всех, кому поручено создать свое собственное или кто хочет увидеть, как это будет работать, вот функция с дополнительным бонусом в виде перестановки значений start-stop на основе желаемого приращения:
def RANGE(start, stop=None, increment=1):
if stop is None:
stop = start
start = 1
value_list = sorted([start, stop])
if increment == 0:
print('Error! Please enter nonzero increment value!')
else:
value_list = sorted([start, stop])
if increment < 0:
start = value_list[1]
stop = value_list[0]
while start >= stop:
worker = start
start += increment
yield worker
else:
start = value_list[0]
stop = value_list[1]
while start < stop:
worker = start
start += increment
yield worker
Отрицательное приращение:
for i in RANGE(1, 10, -1):
print(i)
Или с обратным запуском:
for i in RANGE(10, 1, -1):
print(i)
Выход:
10
9
8
7
6
5
4
3
2
1
Регулярное приращение:
for i in RANGE(1, 10):
print(i)
Выход:
1
2
3
4
5
6
7
8
9
Нулевое приращение:
for i in RANGE(1, 10, 0):
print(i)
Выход:
'Error! Please enter nonzero increment value!'
Для python3 -1укажите значение, которое будет уменьшаться на каждом шаге
for n in range(6,0,-1):
print(n)