Также мне нужно использовать это для удаления элементов из коллекции, поэтому просто нужны индексы.
Джоан Венге
2
второй аргумент на единицу меньше окончательного значения. так что если вы установите -1, то диапазон остановится на 0, если вы установите -5, диапазон остановится на -4 (с шагом -1)
Это лучше, чем принятый ответ, так как он фактически не распределяет все числа в памяти (в Python 3 принятый ответ тоже не будет), плюс более очевидно, что происходит.
Blixt
5
Python до 2.6 действительно выделяет все числа, потому что обратное не может заставить xrange идти назад ... (Начиная с Python 2.6 он вызывает __reversed __ ().)
Роберт Симер
Я предпочитаю , reversed(xrange(len(list)))чтобы xrange(len(list)-1:-1:-1); последний выглядит странно с таким количеством -1.
Musiphil
1
xrange () больше не доступен в Python 3
Крис Граф
1
В Python 3 rangeведет себя так же, как xrangeв 2.7. @hacksoi зависит от варианта использования, но допустим, что вы выполняете итерацию в обратном направлении в большом буфере, допустим, это 10 МБ, тогда создание обратных индексов заранее займет несколько секунд и использует более 50 МБ памяти. Использование инвертированного генератора займет миллисекунды и займет всего несколько байтов памяти.
Blixt
34
for i in range(100,-1,-1)
и немного более длинное (и более медленное) решение:
for i in reversed(range(101))for i in range(101)[::-1]
да, PEP-322 дает нам ясный и наименее подверженный ошибкам способ обращения итераций.
Аллен Шен
1
Это хорошо. Рекомендация о том, как реализовать reversedв PEP-322, вводит в заблуждение, поэтому следует отметить, что reversedвызовет __reversed__повторяемое и вернет результат, а для rangeобъектов это вычисляется с отложенным вычислением range_object. Короче говоря: использование этого метода все еще ленивая оценка.
Рузим
5
Другое решение:
z =10for x in range (z):
y = z-x
print y
Результат:
10987654321
Подсказка: Если вы используете этот метод для обратного отсчета индексов в списке, вам понадобится -1 из значения 'y', так как индексы вашего списка начнутся с 0.
Я попытался сделать это в одном из упражнений codeacademy (реверсирование символов в строке без использования обращения, ни :: -1)
def reverse(text):
chars=[]
l = len(text)
last = l-1for i in range (l):
chars.append(text[last])
last-=1
result=""for c in chars:
result += c
return result
print reverse('hola')
Похоже, ваш ответ - копия вставленного вами теста. Пожалуйста, попробуйте опубликовать минимальный пример: использование globalи timeне имеет отношения к первоначальному вопросу.
Майкл Доубез
-1
Вы также можете создать собственный механизм реверса в Python. Который можно использовать где угодно для повторения цикла
classReverse:"""Iterator for looping over a sequence backwards"""def __init__(self, seq):
self.seq = seq
self.index = len(seq)def __iter__(self):return self
def __next__(self):if self.index ==0:raiseStopIteration
self.index -=1return self.seq[self.index]>>> d =[1,2,3,4,5]>>>for i inReverse(d):...print(i)...54321
Добро пожаловать в стек переполнения! Пожалуйста, рассмотрите возможность редактирования своего поста, чтобы добавить больше объяснения о том, что делает ваш код и почему это решит проблему. Ответ, который в основном содержит только код (даже если он работает), обычно не помогает ОП понять их проблему.
SuperBiasedMan,
Вы понимаете, что использование sortedненужно будет хранить весь список в памяти, верно? Это расточительно и неосуществимо для больших a.
range(100)[::-1]
range(9, -1, -1)
Ответы:
Попробуйте
range(100,-1,-1)
, 3-й аргумент - это приращение для использования (задокументировано здесь ).(варианты «диапазона», запуск, остановка, шаг описаны здесь )
источник
На мой взгляд, это наиболее читабельно:
источник
reversed(xrange(len(list)))
чтобыxrange(len(list)-1:-1:-1)
; последний выглядит странно с таким количеством-1
.range
ведет себя так же, какxrange
в 2.7. @hacksoi зависит от варианта использования, но допустим, что вы выполняете итерацию в обратном направлении в большом буфере, допустим, это 10 МБ, тогда создание обратных индексов заранее займет несколько секунд и использует более 50 МБ памяти. Использование инвертированного генератора займет миллисекунды и займет всего несколько байтов памяти.и немного более длинное (и более медленное) решение:
источник
Обычно в Python вы можете использовать отрицательные индексы, чтобы начать со спины:
Результат:
источник
Почему ваш код не работает
Вы код
for i in range (100, 0)
в порядке, крометретий параметр (
step
) по умолчанию+1
. Таким образом, вы должны указать третий параметр для range (),-1
чтобы сделать шаг назад.ПРИМЕЧАНИЕ. Это включает в себя 100 и 0 на выходе.
Есть несколько способов.
Лучший способ
Для питонического способа, проверьте PEP 0322 .
Это пример Python3 для печати от 100 до 0 (включая 100 и 0).
источник
reversed
в PEP-322, вводит в заблуждение, поэтому следует отметить, чтоreversed
вызовет__reversed__
повторяемое и вернет результат, а дляrange
объектов это вычисляется с отложенным вычислениемrange_object
. Короче говоря: использование этого метода все еще ленивая оценка.Другое решение:
Результат:
Подсказка: Если вы используете этот метод для обратного отсчета индексов в списке, вам понадобится -1 из значения 'y', так как индексы вашего списка начнутся с 0.
источник
Простой ответ для решения вашей проблемы может быть таким:
источник
for var in range(10,-1,-1)
работаетисточник
Коротко и сладко. Это было мое решение, когда я делал курс CodeAcademy. Печатает строку в порядке оборотов.
источник
Вы всегда можете сделать увеличение диапазона и вычесть из переменной в вашем случае,
100 - i
гдеi in range( 0, 101 )
.источник
Я попытался сделать это в одном из упражнений codeacademy (реверсирование символов в строке без использования обращения, ни :: -1)
источник
Я хотел пройти по двум спискам одновременно, поэтому мне нужен был отрицательный индекс. Это мое решение:
Результат:
источник
О, хорошо, прочитайте вопрос неправильно, я думаю, что речь идет о возвращении в массиве? если так, у меня есть это:
источник
global
иtime
не имеет отношения к первоначальному вопросу.Вы также можете создать собственный механизм реверса в Python. Который можно использовать где угодно для повторения цикла
источник
источник
sorted
ненужно будет хранить весь список в памяти, верно? Это расточительно и неосуществимо для большихa
.