2009-05-15 2 views

ответ

236

Попробуйте range(100,-1,-1), третий аргумент является приращением для использования (задокументировано here).

+4

вы также можете использовать xrange вместо диапазона, если вам не нужен список номеров, но это правильный ответ. –

+2

Также мне нужно использовать это, чтобы удалить элементы из коллекции, поэтому просто нужны индексы. –

+2

Какой второй аргумент? – deltanine

24
for i in range(100, -1, -1) 

и некоторые немного больше (и медленнее) решение:

for i in reversed(range(101)) 

for i in range(101)[::-1] 
141

На мой взгляд, это наиболее читаемым:

for i in reversed(xrange(101)): 
    print i, 
+9

Это лучше, чем принятый ответ, поскольку он фактически не выделяет все числа в памяти (в Python 3 принятый ответ тоже не будет), а также более очевидно, что происходит. – Blixt

+5

Python до 2.6 действительно выделяет все числа, потому что reverseed не имеет возможности сказать xrange вернуться назад ... (Так как Python 2.6 вызывает __перечисленный __().) –

+0

@Triptych thanks предпочитает это решение – zulucoda

14

Вообще в Python, вы можете использовать отрицательные индексы для запуска со спины:

numbers = [10, 20, 30, 40, 50] 
for i in xrange(len(numbers)): 
    print numbers[-i - 1] 

Результат:

50 
40 
30 
20 
10 
4

Другое решение:

z = 10 
for x in range (z): 
    y = z-x 
    print y 

Результат:

10 
9 
8 
7 
6 
5 
4 
3 
2 
1 

Совет: Если вы используете этот метод для подсчета обратно индексов в списке, вы хотите -1 из значения «y», так как индексы вашего списка начинаются с 0.

0

Я попробовал это в одном из 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') 
2

Короткий и сладкий. Это было моим решением при курсе CodeAcademy. Распечатывает строку в порядке очереди.

def reverse(text): 
    string = "" 
    for i in range(len(text)-1,-1,-1): 
     string += text[i] 
    return string  
+3

Или 'text [:: - 1]' – PascalVKooten

-1
a = 10 
for i in sorted(range(a), reverse=True): 
    print i 
+0

Добро пожаловать в переполнение стека! Пожалуйста, рассмотрите возможность редактирования сообщения, чтобы добавить больше объяснений о том, что делает ваш код, и почему он решит проблему. Ответ, который в основном содержит только код (даже если он работает), обычно не помогает OP понять их проблему. – SuperBiasedMan

+0

Вы понимаете, что использование 'sorted' будет бесполезно хранить весь список в памяти, не так ли? Это расточительно и нецелесообразно для больших 'a'. –

1

Почему ваш код не работает

вас код 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) 
1

Вы всегда можете сделать увеличение дальности и вычесть из переменных в вашем случае 100 - i где i in range(0, 101).

for i in range(0, 101): 
    print 100 - i 
1

Простой ответ, чтобы решить вашу проблему может выглядеть так:

for i in range(100): 
    i = 100 - i 
    print i 
-1

Лучший способ заключается в использовании функции генерации диапазона

Случай 1. Когда мы знаем, что есть определенное число итераций мы может просто использовать функцию диапазона, такую ​​как

Перед использованием диапазона() позвольте мне дать краткое описание диапазона()

Он принимает три параметра первого начинают номер 2-й номер последнего, кроме этого одного 3 разницы между каждой итерацией

for step in range(5,-1,-1): 
    print(step) 

Случаем 2, когда у нас есть список, и мы хотим перебрать список в обратном порядке

words = ['cat','xat','hat','mat'] 
for word in range(len(words)-1,-1,-1): 
    print(words[word])