BTW, você provavelmente deseja fazer um loop de 99 a 0 e raramente de 100 a 0. Isso afeta as respostas.
Acumenus
1
@ Acumenus Isso foi exatamente o que eu procurei quando chegou aqui. E, para o registro, a solução é simplesmente escrever: range(100)[::-1](que é traduzido automaticamente para range(9, -1, -1)) - Testado em python 3.7
Hassan
Respostas:
399
Tente range(100,-1,-1), o terceiro argumento sendo o incremento a ser usado (documentado aqui ).
(as opções "range", start, stop, step estão documentadas aqui )
Também preciso usar isso para excluir itens da coleção, e é por isso que só queria os índices.
Joan Venge 15/05
2
o segundo argumento é um a menos que o valor final. assim se colocar -1 então o intervalo de pára a 0, se colocar -5, a gama pára a -4 (para um incremento de -1)
Isso é melhor do que a resposta aceita, pois na verdade não aloca todos os números na memória (no Python 3 a resposta aceita também não), além de ser mais óbvio o que está acontecendo.
Blixt 23/03/12
5
Python antes de 2.6 aloca todos os números, porque reversa não tem nenhuma maneira de dizer o xrange para ir para trás ... (Desde Python 2.6 que chama __reversed __ ().)
Robert Siemer
Eu prefiro reversed(xrange(len(list)))a xrange(len(list)-1:-1:-1); o último parece estranho com tantos -1.
Musiphil
1
O xrange () não está mais disponível no Python 3 #
Chris Graf
1
No Python 3, rangese comporta da mesma maneira xrangeque no 2.7. O @hacksoi depende do caso de uso, mas digamos que você esteja iterando para trás em um buffer grande, digamos que seja 10 MB; em seguida, criar os índices reversos antecipadamente levaria segundos e consumiria mais de 50 MB de memória. Usar um gerador invertido levaria milissegundos e consumiria apenas alguns bytes de memória.
Blixt
34
for i in range(100,-1,-1)
e alguma solução um pouco mais longa (e mais lenta):
for i in reversed(range(101))for i in range(101)[::-1]
sim, o PEP-322 nos fornece uma maneira clara e menos propensa a erros de reverter iterações.
Allen Shen
1
Isso é bom. A recomendação de como implementar reversedno PEP-322 é enganosa, por isso deve-se notar que reversedchamará __reversed__na iterable e retornar o resultado, e por rangeobjetos este é um preguiçoso avaliadas range_objectiterador. Em resumo: o uso desse método ainda é uma avaliação preguiçosa.
Ruzihm
5
Outra solução:
z =10for x in range (z):
y = z-x
print y
Resultado:
10987654321
Dica: Se você estiver usando esse método para contar índices em uma lista, convém -1 do valor 'y', pois os índices da lista começarão em 0.
Eu tentei isso em um dos exercícios da codeacademy (reverter chars em uma string sem usar reversed nem :: -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')
Parece que sua resposta é a pasta de cópia do teste que você fez. Por favor, tente postar um exemplo mínimo: o uso de globale timenão é relevante para a pergunta inicial.
Michael Doubez 27/05/19
-1
Você também pode criar um mecanismo reverso personalizado em python. Que pode ser usado em qualquer lugar para fazer um loop iterável para trás
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
Bem-vindo ao Stack Overflow! Considere editar sua postagem para adicionar mais explicações sobre o que seu código faz e por que ele resolverá o problema. Uma resposta que geralmente contém apenas código (mesmo que esteja funcionando) geralmente não ajuda o OP a entender seu problema.
SuperBiasedMan
Você percebe que o uso sorteddesnecessariamente armazena a lista inteira na memória, certo? Isso é um desperdício e não é viável para grandes a.
range(100)[::-1]
(que é traduzido automaticamente pararange(9, -1, -1)
) - Testado em python 3.7Respostas:
Tente
range(100,-1,-1)
, o terceiro argumento sendo o incremento a ser usado (documentado aqui ).(as opções "range", start, stop, step estão documentadas aqui )
fonte
Na minha opinião, este é o mais legível:
fonte
reversed(xrange(len(list)))
axrange(len(list)-1:-1:-1)
; o último parece estranho com tantos-1
.range
se comporta da mesma maneiraxrange
que no 2.7. O @hacksoi depende do caso de uso, mas digamos que você esteja iterando para trás em um buffer grande, digamos que seja 10 MB; em seguida, criar os índices reversos antecipadamente levaria segundos e consumiria mais de 50 MB de memória. Usar um gerador invertido levaria milissegundos e consumiria apenas alguns bytes de memória.e alguma solução um pouco mais longa (e mais lenta):
fonte
Geralmente no Python, você pode usar índices negativos para começar do início:
Resultado:
fonte
Por que seu código não funcionou
Seu código
for i in range (100, 0)
está bom, excetoo terceiro parâmetro (
step
) é por padrão+1
. Portanto, você deve especificar o terceiro parâmetro para range () e-1
retroceder.NOTA: Isso inclui 100 e 0 na saída.
Existem várias maneiras.
Melhor maneira
Para uma maneira python, verifique PEP 0322 .
Este é um exemplo python do Python3 para imprimir de 100 a 0 (incluindo 100 e 0).
fonte
reversed
no PEP-322 é enganosa, por isso deve-se notar quereversed
chamará__reversed__
na iterable e retornar o resultado, e porrange
objetos este é um preguiçoso avaliadasrange_object
iterador. Em resumo: o uso desse método ainda é uma avaliação preguiçosa.Outra solução:
Resultado:
Dica: Se você estiver usando esse método para contar índices em uma lista, convém -1 do valor 'y', pois os índices da lista começarão em 0.
fonte
A resposta simples para resolver seu problema pode ser assim:
fonte
for var in range(10,-1,-1)
trabalhofonte
Curto e grosso. Esta foi a minha solução ao fazer o curso codeAcademy. Imprime uma sequência em ordem de rotação.
fonte
Você sempre pode aumentar o alcance e subtrair de uma variável no seu caso
100 - i
ondei in range( 0, 101 )
.fonte
Eu tentei isso em um dos exercícios da codeacademy (reverter chars em uma string sem usar reversed nem :: -1)
fonte
Eu queria percorrer duas listas ao mesmo tempo para trás, então precisava do índice negativo. Esta é a minha solução:
Resultado:
fonte
Ah, ok, leia a pergunta errada, acho que é sobre retroceder em uma matriz? Se sim, eu tenho o seguinte:
fonte
global
etime
não é relevante para a pergunta inicial.Você também pode criar um mecanismo reverso personalizado em python. Que pode ser usado em qualquer lugar para fazer um loop iterável para trás
fonte
fonte
sorted
desnecessariamente armazena a lista inteira na memória, certo? Isso é um desperdício e não é viável para grandesa
.