Как можно получить следующий список с помощью 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)
Это может быть менее интуитивно понятно, но, как отмечается в комментариях, это более эффективное и правильное использование диапазона для обратного списка.
Используйте встроенную функцию '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
без списка, который функционирует эффективно как список только для чтения (но использует гораздо меньше памяти, особенно для больших диапазонов).
Для тех, кто заинтересован в "эффективность" из вариантов, собранных до сих пор...
Джейме РГП'ы ответ привели меня к перезагрузите компьютер после времени несколько и"сложных" и решения Джейсон буквально следующее мое предложение (через комментарии). Чтобы избавить любопытствующих от вас простоя, я представляю здесь мои результаты (первый блин комом):
Джейсон'ы ответ (может просто экскурс в силе постижение список):
$ 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
, остальные параметры должны быть соответствующим образом скорректированы:
-1
(Он'с предыдущего значения стоп - 1,
стоправен
0`).Н-1
.Так что эквивалент диапазон(N) в обратном порядке будет:
n = 10
print range(n-1,-1,-1)
#[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Читаемость в сторону, обратная(диапазон(Н))
, кажется, быстрее, чем диапазон(Н)[::-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
Просто если кому-то интересно :)
Требование в этом вопросе призывает список целых чисел размером 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))
<listreverseiterator object at 0x10e14e090>
# 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]
Очень часто задают вопрос, Является ли диапазона(9, -1, -1)
лучше, чем обратная(диапазон(10))
в Python 3? Люди, которые работали на других языках с итераторами сразу же склонны думать, что обратная() должен кэшировать все значения, а затем вернуться в обратном порядке. Дело в том, что в Python'ы обратная (оператор)
не'т работу, если объект-это просто итератор. Объект должен иметь один из ниже два для вспять() для работы:
лен () и целое число индексов через
[]`Если вы попытаетесь использовать инвертированное() на объект, который не имеет ни один из выше, то вы получите:
>>> [reversed((x for x in range(10)))]
TypeError: 'generator' object is not reversible
Короче говоря, на языке Python'ы обратная()
подразумевается только такими как объекты и поэтому он должен иметь такое же представление как прямой итерации.
А как насчет диапазона()? Это'т, что генератор? В Python 3 это генератор, но завернутый в класс, который реализует оба выше. Так, диапазон(100000)
не'т занимают много памяти, но она по-прежнему обеспечивает эффективное индексирование и вспять.
Таким образом, вы можете использовать обратная(диапазон(10))
без каких-либо снижение производительности.
Вы можете сделать печать обратных чисел в диапазоне() биф как ,
for number in range ( 10 , 0 , -1 ) :
print ( number )
Выход будет [10,9,8,7,6,5,4,3,2,1]
диапазон() - спектр ( начало , конец , инкремент/декремент ) где начало входит , конец является эксклюзивным и шаг могут быть любые цифры и ведет себя как шаг
я считаю, что это может помочь,
range(5)[::-1]
ниже является использование:
for i in range(5)[::-1]:
print i
range(9,-1,-1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Предположим, у вас есть список его называю а={1,2,3,4,5} Теперь, если вы хотите распечатать список в обратном порядке, то просто используйте следующий код.
a.reverse
for i in a:
print(i)
Я знаю, что вы просили, используя диапазон, но его уже ответили.
Вы Don'т обязательно нужно использовать функцию Range, вы можете просто сделать список[::-1], который возвращает быстро список в обратном порядке, без использования каких-либо дополнений.
range(9,-1,-1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Правильной формы. Если вы используете
reversed(range(10))
вы не получите 0 случае. Например, скажем, ваш 10 это'т магическим числом и переменной вы're, используя для поиска от обратного. Если в вашем случае N равно 0, отменено(диапазон(0)) не будет выполняться, что это неправильно, если вы случайно имеют один объект в индексе ноль.