I informatikk er en for loop vant tilå gjøre samme type handling mange ganger. For eksempel kan du trekke ut et produkt fra listen en etter en, itere over tallene i et bestemt område og utføre det tilsvarende skriptet for hver av dem.
For-sløyfen, i motsetning til mens, er den mest brukte sløyfen. Begge alternativene finnes i alle programmeringsspråk. På en rekke språk er det syntaktisk og semantisk identisk.
I python består en for loop av:
- for operatør;
- navnet på variabelen som skal tildeles;
- listen som behandles;
- funksjonsorgan og flere operatører.
I motsetning til C-lignende språk er ikke instruksjonene detavgrenset av krøllete bukseseler {}. For å gjøre dette, bruk operatøren “:” etter blokken av forhold og tabulering i kroppen av sløyfen. Uten faneinnrykk mislykkes koden, og en feil vises.
Fortsett, pause, pass brukes som tilleggsoperatører - pekere for å hoppe over iterasjon, slutt på loop, hoppe over iterasjon. De er spesifisert etter blokkeringen av noen om-annet forhold.
For løkke
Denne sløyfen brukes til å gjenta alle elementene i samlingen. Spesifisert i formatet
for variabel i liste: uttalelse
Det ligner forløkken fra C ++
foreach (skriv element i sett) {}; for jeg i "hei verden": skriv ut (i * 2, end = "") hheelllloo wwoorrlldd
I Python er for-sløyfen samarbeidende - instruksjonene i kroppen utføres for hvert medlem av listen uten eksplisitt å spesifisere sekvensen. Instruksjonene utføres i den mest optimale rekkefølgen.
Variabelen i er tildelt hvert objekt frasamling. Elementene i listen kan være numeriske og streng, men de må være av heltallstype. Når du arbeider med flerdimensjonale matriser, vil variabelen i bli forstått som nestede matriser.
list_of_lists = [["hammerhead", "great white", "dogfish"], [0, 1, 2], [9.9, 8.8, 7.7]] for liste i liste_lister: skriv ut (liste) ["hammerhead", "great white", "dogfish"] [0, 1, 2] [9.9, 8.8, 7.7]
For å vise hvert element i en nestet matrise, må du bruke nestede løkker.
Fortsette
Operatøren lar deg hoppe over en del av for loop oggå til neste iterasjon. Dette gjøres når en ekstern faktor oppstår. Fortsett er spesifisert etter den ekstra if-blokken, men selve tilstanden er inne i sløyfen før hoveduttalelsen.
nummer = 0 for antall innen rekkevidde (10): tall = nummer + 1 hvis nummer == 5: fortsett # her er fortsett uttalelsen skriv ut (str (nummer)) skriv ut ("Slutt")
Hvert tall i en liste over verdier fra 0 til 10øker variabeltallet, som i utgangspunktet er null. Når tallet er satt til 5, slutter sløyfen og neste iterasjon begynner. Det vil vise seg:
en 2 3 fire 6 7 åtte ni 10 Slutt
Gå i stykker
Operatøren brukes sammen med if-tilstanden. Denne designen forstyrrer syklusen fullstendig når noen faktor oppstår.
nummer = 0 for antall innen rekkevidde (10): nummer + = 1 hvis nummer == 5: pause # pause skriv ut ("Number =" + str (number)) utskrift ("Uten løkke")
Her definerer if-setningen en betingelse: hvis verdien til variabelnummeret er 5, blir sløyfen avsluttet. På hver iterasjon kjøres den første utskriftsmetoden () og viser et varsel
Antall = 5.
Når sløyfen avsluttes med en pauseuttalelse, utføres neste utskriftsmetode ().
Et annet eksempel sjekker om det andre tallet kan deles med det første uten en resten.
for n i rekkevidde (2, 10): for x i rekkevidde (2, n): hvis n% x == 0: skriv ut (n, "er lik", x, "*", n // x) gå i stykker ellers: # loop falt gjennom uten å finne en faktor skriv ut (n, "er et primtall")
I dette tilfellet brukes en nestet løkke.Først blir alle ord fra et sett med tall i området fra 2 til 10 tatt som n. For hver n defineres en ny liste med elementer fra 2 til n. Dermed har vi 8 matriser av forskjellige lengder. Alle elementene fra de resulterende samlingene er spesifisert av x-variabelen. Hvis-tilstanden sjekker nå at resultatet av n / x er en heltallverdi. Hvis det er sant, går sløyfen og viser en melding på skjermen. Hvis n / x deles med resten, vises en annen melding.
Sende
Operatøren er nødvendig for å ignorere tilleggsvilkår.
nummer = 0 for antall innen rekkevidde (10): nummer + = 1 hvis nummer == 5: sende skriv ut (str (nummer)) skriv ut ("Slutt")
Programmet fungerer som om tilstanden hvis nummer == 5 ikke eksisterer. Skjermen vises
en 2 3 fire fem 6 7 åtte ni 10 Slutt
Det ser vi under utførelsen av passoperatøreningenting skjer. Den brukes bare som stubbe der det er syntaktisk nødvendig. For eksempel når du utvikler en ny klasse med metoder du ikke trenger å implementere.
klasse MyClass (objekt): def meth_a (selv): sende def meth_b (selv): skriv ut "I" m meth_b "
Meth_a-funksjonen har ennå ikke sin egen instruksjon. Men Python krever at hvis, bortsett fra def, klassekodeblokker ikke er tomme. Ellers vises en feilmelding.
IndentationError: forventet en innrykket blokk.
Du kan spesifisere pass i stedet.
klasse CompileError (unntak): sende
Et annet formål med å bruke passerklæringen er å eksplisitt si å gjøre ingenting.
Dette kan sees i et annet eksempel på en for og pass-sløyfe:
for t innen rekkevidde (25): punktum) hvis t == 20: sende
Denne kodebiten gjentas over listeelementenefra 0 til 25. De behandles som en variabel t. Ved hver iterasjon utføres noen do () -funksjoner. Hvis du ikke vil at noe i det hele tatt skal skje på en eller annen verdi, er pass spesifisert. For eksempel skriver do-funksjonen ut en melding 24 ganger og hopper over instruksjonen ved t = 20.
Arrays
For loop-programmer hjelper deg med å lage en sekvens av verdier og tilordne dem til variabler.
Følgende post er mulig:
for i i [0, 1, 2, 3, 4, 5]: skriv ut ** 2
Hvis listen hadde flere elementer, ville det være mer rasjonelt å lage en egen matrise.
array = [1, 2, 3, 4, 5, 6, 7, 8, 9] for i rekke: skrive ut i
Å lage lister som
array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
, Python har en range () -funksjon.Range () -metoden tar tre argumenter i parameterområdet: startverdi, sluttverdi, trinn. Bare det siste elementet i listen kreves. Dermed vil rekkevidde (5) bety at matrisen inkluderer tall fra 0 til 5. Hvis et trinn er spesifisert, må startelementet også bestemmes.
rekkevidde (0, 10, 2)
Vi får:
0, 2, 4, 6, 8, 10
Strenglister
Å jobbe med slike lister ligner på numeriske. For eksempel er det en liste
farger = ["rød", "grønn", "blå", "gul"]
Utviklere som er vant til C kan skrive følgende funksjon.
for jeg innen rekkevidde (len (farger)): trykkfarger [i]
Koden kjører uten feil, men en mer korrekt bruk av for loop ser slik ut:
farger = ["rød", "grønn", "blå", "gul"] for farger i farger: trykkfarge
Hvis du trenger å gjenta listen fra sist til null, brukes den omvendte () funksjonen.
farger = ["rød", "grønn", "blå", "gul"] for farge i omvendt (farger): trykkfarge
Følgende oppføring er feil. Igjen kom en lignende ting fra C-språket.
Lister og indekser
Python tilbyr innebygde enumerate () -funksjoner for å manipulere matriseindekser. De er praktiske å bruke i python for løkker.
En rekke verdier tas som argumenter. Enumerate () -funksjonen gjør det enkelt å bruke følgende kode:
for jeg innen rekkevidde (len (L)): element = L [i] # ... beregne noe resultat basert på element ...
Len () -metoden brukes her. Det returnerer antall elementer, i dette tilfellet matrise L. Mange elementer aksepteres som et argument for funksjonen for rekkevidde (). Dermed definerer vi listen [0, ... n].
Ved hjelp av L [i] får vi tilgang til hvert element i matrisen L.
L [0], L [1], L [2] osv.
Enumerate () -funksjonen eliminerer behovet for å initialisere tellervariabelen b og gjør det lettere å skrive til
for teller, verdi i enumerate (L): print ("indeks:" teller, "verdi:" verdi) "
Enumerate () returnerer et mot-elementpar, så to variabler er spesifisert med for loop-setningen.
Elementene () og iteritems () -funksjonene, som brukes som metoder, er like.
d.items () d.iteritems ()
To lister
Når det er nødvendig å bruke medlemmer av flere lister, brukes zip () -funksjonen.
Det tar liste A og liste B og lager et enkelt zip-objekt av dem, som inneholder nestede tupler. Hvert element i det nye objektet sammenkobler medlemmene i listene A og B og sorterer dem etter indeks.
zip_object [1] = [A [1], B [1]];
Hvis zip () -inngangen spesifiserer fire matriser,elementene i zip-arrayet vil inneholde 4 elementer hver. Pakking av matriser av forskjellige lengder kaster ikke feil. Bare elementene som inneholder et verdipar blir plassert i det nye objektet.
Zip_longest () brukes til å inkludere hvert element i en tuple, til og med ett uten par.
liste (itertools.zip_longest ((1,2,3), [4])) # [(1, 4), (2, Ingen), (3, Ingen)]
Sorter etter nøkkel
Når det ikke bare er nødvendig å gå gjennom elementene i en matrise, men å endre den, brukes tastene () -funksjonen.
Metoden dupliserer og returnerer en liste over tilgjengelige ordbokstaster.
for k i d.keys (): hvis k.startswith ("R"): del d [k]
Det er en matrise d. Elementene kopieres ved hjelp av tastene (). Hvert element er en variabel k. Det behandles ved å starte med. Hvis det er samsvar, fjernes elementet fra hovedmatrisen.
startswith () returnerer et flagg som sjekker om strengen starter med det angitte prefikset. Funksjonen har tre argumenter: prefiks, start, slutt.
str.startswith (prefiks [, start [, slutt]]) -> bool
Bare det første kreves - prefiks. Det kan være en streng eller en tupel.
my_str.startswith (‘verdi’)
eller
my_str.startswith ((‘verdi1’, ‘verdi2’))
Hvis det kreves flere linjer i parameterfeltet, pakkes elementene inn i flere parenteser ().
Startargumentet peker på indeksen til elementet medsom nedtellingen begynner. Positive og negative verdier støttes. Hvis start = -x, begynner søket fra slutten av elementet ved indeks x. Sluttparameteren angir det siste tegnet der du skal slutte å analysere strengen. Den støtter også negative verdier. Hvis slutten = -x, er det siste medlemmet av listen med indeks x fra begynnelsen.
Funksjonen endswith () fungerer analogt med startswith (). Den sjekker om strengen slutter med det angitte postfixet. Den har tre parametersuffiks, start, slutt, og returnerer også en boolsk verdi.
Kombinere lister
Hvis du trenger å koble sammen elementer av to matriser,den raskeste måten er å bruke en rekke dict (izip (array 1, array 1)) metoder. I dette tilfellet er elementene ikke ordnet sekvensielt etter hverandre, men i form:
'Array element 1': 'array element 2'
names = ["raymond", "rachel", "matthew"] farger = ["rød", "grønn", "blå"] d = dict (zip (navn, farger)) # {"matthew": "blå", "rachel": "grønn", "raymond": "rød"}
Dikt () -metoden oppretter en ordbok der inneverdiene plasseres på ovennevnte måte - gjennom “:”. Elementet i array 2 brukes som hovedverdi. For å kalle det, må du referere til det med indeks - verdien til array 1.
d ['raymond'] #rød
Teller medlemmene av en liste
For å finne ut hvor mange elementer en liste består av, bruk funksjonen get ().
d.get (nøkkel, standard = Ingen)
Denne metoden sjekker ordboken d for tilstedeværelse av nøkkel, og returnerer indeksnøkkelen [indeks].
farger = ["rød", "grønn", "rød", "blå", "grønn", "rød"] d = {} for farger i farger: d [farge] = d.get (farge, 0) + 1
Get () -metoden er en mer praktisk og raskere analog av følgende kode.
farger = ["rød", "grønn", "rød", "blå", "grønn", "rød"] d = {} for farger i farger: hvis fargen ikke er i d: d [farge] = 0 d [farge] + = 1
Dette er grunnleggende eksempler og mulige feil på for loop.