Ik heb het over iets doen als:
for(i=n; i>=1; --i) {
//do something with i
}
Ik kan enkele manieren bedenken om dit in python te doen (een lijst maken van range(1,n+1)
en deze omkeren, met behulp van while
en --i
, …) maar ik vroeg me af of er een elegantere manier is om het te doen. Is er?
BEWERKEN:
Sommigen stelden voor dat ik xrange() gebruik in plaats van range() aangezien range een lijst retourneert terwijl xrange een iterator retourneert. Maar in Python 3 (die ik toevallig gebruik) retourneert range() een iterator en xrange bestaat niet.
Antwoord 1, autoriteit 100%
range()
en xrange()
nemen een derde parameter die een stap specificeert. U kunt dus het volgende doen.
range(10, 0, -1)
Wat geeft
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Maar voor iteratie zou je eigenlijk xrange
moeten gebruiken. Dus,
xrange(10, 0, -1)
Opmerking voor gebruikers van Python 3: er zijn geen aparte functies voor
range
enxrange
in Python 3, er is alleenrange
, dat volgt op de ontwerp vanxrange
van Python 2.
Antwoord 2, autoriteit 53%
for x in reversed(whatever):
do_something()
Dit werkt op vrijwel alles met een gedefinieerde volgorde, inclusief xrange
-objecten en lijsten.
Antwoord 3, autoriteit 5%
Al deze drie oplossingen geven dezelfde resultaten als de invoer een string is:
1.
def reverse(text):
result = ""
for i in range(len(text),0,-1):
result += text[i-1]
return (result)
2.
text[::-1]
3.
"".join(reversed(text))
Antwoord 4, autoriteit 2%
def reverse(text):
reversed = ''
for i in range(len(text)-1, -1, -1):
reversed += text[i]
return reversed
print("reverse({}): {}".format("abcd", reverse("abcd")))
Antwoord 5
Als je een tekenreeks wilt omkeren zonder reversed
of [::-1]
te gebruiken, probeer je zoiets als:
def reverse(text):
# Container for reversed string
txet=""
# store the length of the string to be reversed
# account for indexes starting at 0
length = len(text)-1
# loop through the string in reverse and append each character
# deprecate the length index
while length>=0:
txet += "%s"%text[length]
length-=1
return txet