Что в этом элегантного? Вы тратите время, переворачивая список, вместо того, чтобы создавать его так, как вы этого хотите.
Alexis
5
@alexis это ничего не стоит. Вы получаете это reversed(range)бесплатно благодаря хорошей range_reverseоптимизации, встроенной в CPython. Я сделал несколько быстрых тестов и не смог найти существенную разницу стоимости между step=-1и reversed()в обоих Python 2.7 и 3.3. Также обратите внимание, что эта идиома используется в heapq .
kojiro
Спасибо, @kojiro, это интересно. Но если вы не использовали xrangeв своих тестах Python 2.7, reverseбудет работать с обычным, уже сгенерированным списком, а не с объектом диапазона; Так вы говорите, что любой список можно эффективно перевернуть, или просто range/xrangeобъекты? (код heapq, на который вы ссылаетесь, включает объект диапазона Python 3).
Alexis
@alexis Я бы не осмелился предположить, что любой список можно эффективно перевернуть - это слишком неквалифицированное утверждение, чтобы я все равно отвечал. Это говорит, однако, что heapify код изменяется от step=-1до reversed()между Python 2.3 и 2.4
Кодзиро
1
reversed(range(10))не может выходить 4через 0. Может, вы имели в виду range(5)?
0 - условное значение, когда это условие истинно, цикл будет продолжать выполняться. 10 - начальное значение. 1 - модификатор, где может быть простой декремент.
for number in reversed(range(0,10,1)):
print number;
Поздно к вечеринке, но для всех, кому поручено создать свое собственное или кто хочет увидеть, как это будет работать, вот функция с дополнительным бонусом в виде перестановки значений start-stop на основе желаемого приращения:
for i in reversed(mat):
хотя это может быть медленнееОтветы:
for n in range(6,0,-1): print n # prints [6, 5, 4, 3, 2, 1]
источник
range(5,-1,-1)
. Хотя, наверное, он мог понять это методом проб и ошибок.Это очень поздно, но я просто хотел добавить, что есть более элегантный способ: использовать
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).step=-1
доreversed()
между Python 2.3 и 2.4reversed(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
источник
for n in range(6,0,-1): print n
источник
>>> range(6, 0, -1) [6, 5, 4, 3, 2, 1]
источник
0 - условное значение, когда это условие истинно, цикл будет продолжать выполняться. 10 - начальное значение. 1 - модификатор, где может быть простой декремент.
for number in reversed(range(0,10,1)): print number;
источник
Поздно к вечеринке, но для всех, кому поручено создать свое собственное или кто хочет увидеть, как это будет работать, вот функция с дополнительным бонусом в виде перестановки значений 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)
источник