Til sløjfer i Python

Til løkkeerklæringer

Python bruger en for-løkke til at gentage en liste over elementer. I modsætning til C eller Java, som bruger for-sløjfen til at ændre en værdi i trin og få adgang til noget som et array, der bruger den værdi.

For sløjfer gentages over samlingsbaserede datastrukturer som lister, tupler og ordbøger.

Den grundlæggende syntaks er:

for value in list_of_values: # use value inside this block

Generelt kan du bruge alt som iteratorværdien, hvor poster i iterable kan tildeles. F.eks. Kan du pakke ud tupler fra en liste over tupler:

list_of_tuples = [(1,2), (3,4)] for a, b in list_of_tuples: print("a:", a, "b:", b)

På den anden side kan du løbe over alt, hvad der kan gentages. Du kan ringe til en funktion eller bruge en bogstavelig liste.

for person in load_persons(): print("The name is:", person.name)
for character in ["P", "y", "t", "h", "o", "n"]: print("Give me a '{}'!".format(character))

Nogle måder, hvorpå For-sløjfer bruges:

Iterere over området () -funktionen

for i in range(10): print(i)

I stedet for at være en funktion er rækkevidde faktisk en uforanderlig sekvenstype. Outputtet vil indeholde resultater fra nedre grænse, dvs. 0 til øvre grænse, dvs. 10, men eksklusive 10. Som standard er den nedre grænse eller startindekset sat til nul. Produktion:

> 0 1 2 3 4 5 6 7 8 9 >

Derudover kan man specificere den nedre grænse for sekvensen og endda sekvensens trin ved at tilføje et andet og et tredje parameter.

for i in range(4,10,2): #From 4 to 9 using a step of two print(i)

Produktion:

> 4 6 8 >

xrange () funktion

For det meste er xrange og rækkevidde nøjagtigt de samme med hensyn til funktionalitet. De giver begge en måde at generere en liste over heltal, som du kan bruge, uanset hvad du vil. Den eneste forskel er, at området returnerer et Python-listeobjekt, og xrange returnerer et xrange-objekt. Det betyder, at xrange faktisk ikke genererer en statisk liste ved kørselstid, som området gør. Det skaber værdierne, efterhånden som du har brug for dem, med en speciel teknik kaldet eftergivelse. Denne teknik bruges med en type genstand kendt som generatorer.

En ting mere at tilføje. I Python 3.x findes xrange-funktionen ikke længere. Områdefunktionen gør nu, hvad xrange gør i Python 2.x

Iterer over værdier i en liste eller dobbelt

A = ["hello", 1, 65, "thank you", [2, 3]] for value in A: print(value)

Produktion:

> hello 1 65 thank you [2, 3] >

Iterér over taster i en ordbog (aka hashmap)

fruits_to_colors = {"apple": "#ff0000", "lemon": "#ffff00", "orange": "#ffa500"} for key in fruits_to_colors: print(key, fruits_to_colors[key])

Produktion:

> apple #ff0000 lemon #ffff00 orange #ffa500 >

Iterér over to lister af samme størrelse i en enkelt sløjfe med zip () -funktionen

A = ["a", "b", "c"] B = ["a", "d", "e"] for a, b in zip(A, B): print a, b, a == b 

Produktion:

> a a True b d False c e False >

Iterer over en liste, og få det tilsvarende indeks med funktionen enumerate ()

A = ["this", "is", "something", "fun"] for index,word in enumerate(A): print(index, word)

Produktion:

> 0 this 1 is 2 something 3 fun >

En almindelig brugssag er iterering over en ordbog:

for name, phonenumber in contacts.items(): print(name, "is reachable under", phonenumber)

Hvis du absolut har brug for adgang til det aktuelle indeks for din iteration, skal du IKKE bruge range(len(iterable))! Dette er en ekstremt dårlig praksis og giver dig masser af humringer fra senior Python-udviklere. Brug den indbyggede funktion i enumerate()stedet:

for index, item in enumerate(shopping_basket): print("Item", index, "is a", item)

for / ellers udsagn

Pyhton tillader dig at bruge andet med til sløjfer, det andet tilfælde udføres, når ingen af ​​betingelserne i loopkroppen var opfyldt. For at bruge det andet er vi nødt til at gøre brug af breakudsagn, så vi kan bryde ud af sløjfen i en satsfied-tilstand. Hvis vi ikke bryder ud, udføres den anden del.

week_days = ['Monday','Tuesday','Wednesday','Thursday','Friday'] today = 'Saturday' for day in week_days: if day == today: print('today is a week day') break else: print('today is not a week day')

I ovenstående tilfælde vil output være, today is not a week dayda bruddet i sløjfen aldrig vil blive udført.

Iterer over en liste ved hjælp af inline loop-funktion

Vi kunne også gentage inline ved hjælp af python, for eksempel hvis vi har brug for at store bogstaver i en liste fra en liste, kunne vi ganske enkelt gøre følgende:

A = ["this", "is", "awesome", "shinning", "star"] UPPERCASE = [word.upper() for word in A] print (UPPERCASE)

Produktion:

> ['THIS', 'IS', 'AWESOME', 'SHINNING', 'STAR'] >

Mere information:

  • Python2 til loop-dokumentation
  • Python3 til loop-dokumentation