Я намагаюся перевести цикл від 100 до 0. Як це зробити в Python?
for i in range (100,0)
не працює.
range(100)[::-1]
(що автоматично перекладається на range(9, -1, -1)
) - Тестовано на python 3.7
Я намагаюся перевести цикл від 100 до 0. Як це зробити в Python?
for i in range (100,0)
не працює.
range(100)[::-1]
(що автоматично перекладається на range(9, -1, -1)
) - Тестовано на python 3.7
Відповіді:
Спробуйте range(100,-1,-1)
, третій аргумент - це приріст для використання ( тут задокументовано ).
(Параметри "діапазону", початок, зупинка, крок задокументовані тут )
На мою думку, це найчитабельніше:
for i in reversed(xrange(101)):
print i,
reversed(xrange(len(list)))
за краще xrange(len(list)-1:-1:-1)
; останній просто дивно виглядає з такою кількістю -1
's.
range
поводиться так само, як xrange
і в 2.7. @hacksoi залежить від випадку використання, але скажімо, що ви повторюєте велике буферне обертання, скажімо, це 10 Мб, тоді створення зворотних індексів наперед зайняло б секунди і зайняло понад 50 Мб пам'яті. Використання зворотного генератора зайняло б мілісекунди і зайняло б лише кілька байт пам'яті.
Чому ваш код не працював
У вас код for i in range (100, 0)
добре, за винятком
третій параметр ( step
) за замовчуванням +1
. Отже, вам слід вказати 3-й параметр to 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 i in range(100):
k = 100 - i
print(k)
for var in range(10,-1,-1)
працює
Я спробував це в одному з вправ з кодекодемією (реверсування символів у рядку, не використовуючи перевернутого nor :: -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
.