Я пытаюсь зациклить от 100 до 0. Как мне сделать это в Python?
for i in range (100,0)
не работает
range(100)[::-1]
range(9, -1, -1)
Я пытаюсь зациклить от 100 до 0. Как мне сделать это в Python?
for i in range (100,0)
не работает
range(100)[::-1]
range(9, -1, -1)
Ответы:
Попробуйте range(100,-1,-1)
, 3-й аргумент - это приращение для использования (задокументировано здесь ).
(варианты «диапазона», запуск, остановка, шаг описаны здесь )
На мой взгляд, это наиболее читабельно:
for i in reversed(xrange(101)):
print i,
reversed(xrange(len(list)))
чтобы xrange(len(list)-1:-1:-1)
; последний выглядит странно с таким количеством -1
.
range
ведет себя так же, как xrange
в 2.7. @hacksoi зависит от варианта использования, но допустим, что вы выполняете итерацию в обратном направлении в большом буфере, допустим, это 10 МБ, тогда создание обратных индексов заранее займет несколько секунд и использует более 50 МБ памяти. Использование инвертированного генератора займет миллисекунды и займет всего несколько байтов памяти.
Почему ваш код не работает
Вы код for i in range (100, 0)
в порядке, кроме
третий параметр ( step
) по умолчанию +1
. Таким образом, вы должны указать третий параметр для range (), -1
чтобы сделать шаг назад.
for i in range(100, -1, -1):
print(i)
ПРИМЕЧАНИЕ. Это включает в себя 100 и 0 на выходе.
Есть несколько способов.
Лучший способ
Для питонического способа, проверьте PEP 0322 .
Это пример Python3 для печати от 100 до 0 (включая 100 и 0).
for i in reversed(range(101)):
print(i)
reversed
в PEP-322, вводит в заблуждение, поэтому следует отметить, что reversed
вызовет __reversed__
повторяемое и вернет результат, а для range
объектов это вычисляется с отложенным вычислением range_object
. Короче говоря: использование этого метода все еще ленивая оценка.
for var in range(10,-1,-1)
работает
Я попытался сделать это в одном из упражнений codeacademy (реверсирование символов в строке без использования обращения, ни :: -1)
def reverse(text):
chars= []
l = len(text)
last = l-1
for i in range (l):
chars.append(text[last])
last-=1
result= ""
for c in chars:
result += c
return result
print reverse('hola')
Я хотел пройти по двум спискам одновременно, поэтому мне нужен был отрицательный индекс. Это мое решение:
a= [1,3,4,5,2]
for i in range(-1, -len(a), -1):
print(i, a[i])
Результат:
-1 2
-2 5
-3 4
-4 3
-5 1
О, хорошо, прочитайте вопрос неправильно, я думаю, что речь идет о возвращении в массиве? если так, у меня есть это:
array = ["ty", "rogers", "smith", "davis", "tony", "jack", "john", "jill", "harry", "tom", "jane", "hilary", "jackson", "andrew", "george", "rachel"]
counter = 0
for loop in range(len(array)):
if loop <= len(array):
counter = -1
reverseEngineering = loop + counter
print(array[reverseEngineering])
global
и time
не имеет отношения к первоначальному вопросу.
Вы также можете создать собственный механизм реверса в Python. Который можно использовать где угодно для повторения цикла
class Reverse:
"""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:
raise StopIteration
self.index -= 1
return self.seq[self.index]
>>> d = [1,2,3,4,5]
>>> for i in Reverse(d):
... print(i)
...
5
4
3
2
1
a = 10
for i in sorted(range(a), reverse=True):
print i
sorted
ненужно будет хранить весь список в памяти, верно? Это расточительно и неосуществимо для больших a
.