Вывести список в обратном порядке с помощью range()?

Как можно получить следующий список с помощью range() в Python?

[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Решение

используйте функцию reversed():

reversed(range(10))

Это гораздо более осмысленно.

Обновление:

Если вы хотите, чтобы это был список (как указал btk):

list(reversed(range(10)))

Обновление:

Если вы хотите использовать только range для достижения того же результата, вы можете использовать все его параметры. range(start, stop, step).

Например, чтобы создать список [5,4,3,2,1,0], вы можете использовать следующее:

range(5, -1, -1)

Это может быть менее интуитивно понятно, но, как отмечается в комментариях, это более эффективное и правильное использование диапазона для обратного списка.

Комментарии (11)

Используйте встроенную функцию 'range'. Сигнатура имеет вид range(start, stop, step). В результате получается последовательность чисел, начинающаяся с start и заканчивающаяся при достижении stop, исключая stop.

>>> range(9,-1,-1)   
    [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> range(-2, 6, 2)
    [-2, 0, 2, 4]

В Python 3 это создает объект range без списка, который функционирует эффективно как список только для чтения (но использует гораздо меньше памяти, особенно для больших диапазонов).

Комментарии (4)

Вы могли бы использовать'range(10)[::-1], которая является то же самое, что'range(9, -1, -1)и, вероятно, более читаемым (если вы're с общим'sequence[::-1]`в Python идиома).

Комментарии (0)

Для тех, кто заинтересован в "эффективность" из вариантов, собранных до сих пор...

Джейме РГП'ы ответ привели меня к перезагрузите компьютер после времени несколько и"сложных" и решения Джейсон буквально следующее мое предложение (через комментарии). Чтобы избавить любопытствующих от вас простоя, я представляю здесь мои результаты (первый блин комом):

Джейсон'ы ответ (может просто экскурс в силе постижение список):

$ python -m timeit "[9-i for i in range(10)]"
1000000 loops, best of 3: 1.54 usec per loop

Мартино'ы ответ (читается если вы знакомы с синтаксисом дополнительные слайсы](https://docs.python.org/2.3/whatsnew/section-slices.html)):

$ python -m timeit "range(10)[::-1]"
1000000 loops, best of 3: 0.743 usec per loop

Михал Šrajer'ы ответ (принят, очень легко читаются):

$ python -m timeit "reversed(range(10))"
1000000 loops, best of 3: 0.538 usec per loop

бэнэ'ы ответ (самый первый, но очень схематично в это время):

$ python -m timeit "range(9,-1,-1)"
1000000 loops, best of 3: 0.401 usec per loop

Последний вариант легко запомнить, используя линейку(Н-1,-1,-1)` нотация Вал Neekman.

Комментарии (1)
for i in range(8, 0, -1)

будем решать эту проблему. Он будет выводить 8 до 1, а -1 означает обратную списка

Комментарии (0)

Нет смысла использовать реверс, потому что метод диапазон может вернуться вспять списка.

Когда у вас перебор Н предметы и хочу заменить заказ из списка, возвращенного диапазона(запуск, остановка, шаг) вы должны использовать третий параметр в диапазоне, который определяет " шаг " и установить его на -1, остальные параметры должны быть соответствующим образом скорректированы:

  1. Предоставить стоп параметр как -1(Он'с предыдущего значения стоп - 1,стоправен0`).
  2. Как начать использовать параметр Н-1.

Так что эквивалент диапазон(N) в обратном порядке будет:

n = 10
print range(n-1,-1,-1) 
#[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Комментарии (3)

Читаемость в сторону, обратная(диапазон(Н)), кажется, быстрее, чем диапазон(Н)[::-1].

$ python -m timeit "reversed(range(1000000000))"
1000000 loops, best of 3: 0.598 usec per loop
$ python -m timeit "range(1000000000)[::-1]"
1000000 loops, best of 3: 0.945 usec per loop

Просто если кому-то интересно :)

Комментарии (2)

Требование в этом вопросе призывает список целых чисел размером 10 в порядке убывания порядок. Итак, позвольте'ы составить список в Python.

# This meets the requirement.
# But it is a bit harder to wrap one's head around this. right?
>>> range(10-1, -1, -1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

# let's find something that is a bit more self-explanatory. Sounds good?
# ----------------------------------------------------

# This returns a list in ascending order.
# Opposite of what the requirement called for.
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# This returns an iterator in descending order.
# Doesn't meet the requirement as it is not a list.
>>> reversed(range(10))


# This returns a list in descending order and meets the requirement
>>> list(reversed(range(10)))
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Комментарии (1)

Очень часто задают вопрос, Является ли диапазона(9, -1, -1) лучше, чем обратная(диапазон(10)) в Python 3? Люди, которые работали на других языках с итераторами сразу же склонны думать, что обратная() должен кэшировать все значения, а затем вернуться в обратном порядке. Дело в том, что в Python'ы обратная (оператор) не'т работу, если объект-это просто итератор. Объект должен иметь один из ниже два для вспять() для работы:

  1. Либо поддержка лен () и целое число индексов через[]`
  2. Или `обратная (способ) реализуется.

Если вы попытаетесь использовать инвертированное() на объект, который не имеет ни один из выше, то вы получите:

>>> [reversed((x for x in range(10)))]
TypeError: 'generator' object is not reversible

Короче говоря, на языке Python'ы обратная() подразумевается только такими как объекты и поэтому он должен иметь такое же представление как прямой итерации.

А как насчет диапазона()? Это'т, что генератор? В Python 3 это генератор, но завернутый в класс, который реализует оба выше. Так, диапазон(100000) не'т занимают много памяти, но она по-прежнему обеспечивает эффективное индексирование и вспять.

Таким образом, вы можете использовать обратная(диапазон(10)) без каких-либо снижение производительности.

Комментарии (0)

Вы можете сделать печать обратных чисел в диапазоне() биф как ,

for number in range ( 10 , 0 , -1 ) :
    print ( number ) 

Выход будет [10,9,8,7,6,5,4,3,2,1]

диапазон() - спектр ( начало , конец , инкремент/декремент ) где начало входит , конец является эксклюзивным и шаг могут быть любые цифры и ведет себя как шаг

Комментарии (0)

я считаю, что это может помочь,

range(5)[::-1]

ниже является использование:

for i in range(5)[::-1]:
    print i 
Комментарии (0)

Используя без [::-1] или обращенно -

def reverse(text):
    result = []
    for index in range(len(text)-1,-1,-1):
        c = text[index]
        result.append(c)
    return ''.join(result)

print reverse("python!")
Комментарии (1)
[9-i for i in range(10)]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Комментарии (0)

Предположим, у вас есть список его называю а={1,2,3,4,5} Теперь, если вы хотите распечатать список в обратном порядке, то просто используйте следующий код.

a.reverse
for i in a:
   print(i)

Я знаю, что вы просили, используя диапазон, но его уже ответили.

Комментарии (0)

Вы Don'т обязательно нужно использовать функцию Range, вы можете просто сделать список[::-1], который возвращает быстро список в обратном порядке, без использования каких-либо дополнений.

Комментарии (1)
range(9,-1,-1)
    [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Правильной формы. Если вы используете

reversed(range(10))

вы не получите 0 случае. Например, скажем, ваш 10 это'т магическим числом и переменной вы're, используя для поиска от обратного. Если в вашем случае N равно 0, отменено(диапазон(0)) не будет выполняться, что это неправильно, если вы случайно имеют один объект в индексе ноль.

Комментарии (0)