Hoe loop je achteruit in python?

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 whileen --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 xrangemoeten gebruiken. Dus,

xrange(10, 0, -1)

Opmerking voor gebruikers van Python 3: er zijn geen aparte functies voor rangeen xrangein Python 3, er is alleen range, dat volgt op de ontwerp van xrangevan 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 reversedof [::-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

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes