In de informatica wordt de for-lus gebruiktom vaak hetzelfde te doen. Verwijder bijvoorbeeld de goederen één voor één uit de lijst, sorteer de nummers in een bepaald bereik en voer voor elk van hen het bijbehorende script uit.
De for-lus wordt in tegenstelling tot terwijl het vaakst gebruikt. Beide opties bestaan in alle programmeertalen. In een aantal PL's is het syntactisch en semantisch identiek.
In python bestaat een for-lus uit:
In tegenstelling tot C-achtige talen zijn instructies dat nietgescheiden door accolades {}. Gebruik hiervoor de operator ":" na het blok voorwaarden en tabellen in de body van de lus. Zonder het inspringen van het tabblad, zal de code niet werken en zal een fout verschijnen.
Als extra operatoren, doorgaan, breken, pass worden gebruikt - pointers om de iteratie over te slaan, de lus te beëindigen, de iteratie over te slaan. Ze worden aangegeven na een blok met een aantal andere voorwaarden.
Een dergelijke lus wordt gebruikt om alle elementen van een verzameling te doorlopen. Stel in het formaat in
voor variabele in lijst: instructie
Het lijkt op een foreach-lus van C ++
foreach (typ item in set) {};
want ik in "hallo wereld":
print (i * 2, end = "")
hheelllloo wwoorrlldd
In Python werkt de for-lus samen - body-instructies worden uitgevoerd voor elk lid van de lijst zonder expliciet een reeks op te geven. De uitvoering van de instructies gebeurt in de meest optimale volgorde.
Aan de variabele i wordt elk object toegewezencollectie. Lijstitems kunnen numeriek of tekenreeks zijn, maar altijd een geheel getal. Bij het werken met multidimensionale arrays, wordt de variabele i opgevat als geneste arrays.
list_of_lists = [["hammerhead", "great white", "dogfish"], [0, 1, 2], [9.9, 8.8, 7.7]]
voor lijst in list_of_lists:
print (lijst)
["hammerhead", "great white", "dogfish"]
[0, 1, 2]
[9.9, 8.8, 7.7]
Om elk element van een geneste array weer te geven, moet u geneste loops gebruiken.
Met de operator kunt u een deel van de for-lus overslaan enga naar de volgende iteratie. Dit gebeurt wanneer een externe factor optreedt. Doorgaan wordt aangegeven na het optionele if-blok, maar de voorwaarde zelf bevindt zich binnen de lus vóór de hoofdinstructie.
nummer = 0
voor nummer binnen bereik (10):
nummer = nummer + 1
indien nummer == 5:
continue # hier is de instructie continue
print (str (nummer))
print ("Einde")
Каждый number в списке значений от 0 до 10 verhoogt het variabele nummer, dat aanvankelijk nul is. Wanneer nummer de waarde 5 krijgt, wordt de lus afgebroken en begint de volgende iteratie. Het zal blijken:
1
2
3
4
6
7
8
9
10
einde
De operator wordt gebruikt in combinatie met de if-voorwaarde. Dit ontwerp onderbreekt de cyclus volledig wanneer een factor optreedt.
nummer = 0
voor nummer binnen bereik (10):
nummer + = 1
indien nummer == 5:
pauze # pauze
print ("Number =" + str (nummer))
print ("Out of loop")
Hier definieert de instructie if een voorwaarde: als de waarde van het variabele getal 5 is, wordt de lus afgebroken. Bij elke iteratie wordt de eerste print () -methode uitgevoerd en wordt een melding weergegeven
Aantal = 5.
Wanneer de lus wordt gestopt door de instructie break, wordt de volgende print () -methode uitgevoerd.
Een ander voorbeeld controleert of het tweede nummer deelbaar is door het eerste zonder een rest.
voor n binnen bereik (2, 10):
voor x binnen bereik (2, n):
als n% x == 0:
print (n, "is gelijk aan", x, "*", n // x)
breuk
anders:
# lus viel door zonder een factor te vinden
print (n, "is een priemgetal")
In dit geval wordt een geneste lus gebruikt.Eerst worden alle leden van een aantal getallen variërend van 2 tot 10 geaccepteerd als n. Voor elke n wordt een nieuwe lijst gedefinieerd met items van 2 tot n. We hebben dus 8 arrays van verschillende lengtes. Alle elementen uit de resulterende collecties worden ingesteld door de variabele x. Nu controleert de if-voorwaarde dat het resultaat van n / x een geheel getal is. Indien waar, breekt de lus en wordt er een bericht weergegeven. Als n / x wordt gedeeld met de rest, wordt een ander bericht weergegeven.
De operator is nodig om aanvullende voorwaarden te negeren.
nummer = 0
voor nummer binnen bereik (10):
nummer + = 1
indien nummer == 5:
passeren
print (str (nummer))
print ("Einde")
Het programma werkt alsof de voorwaarde als nummer == 5 niet bestaat. Verschijnt op de monitor
1
2
3
4
5
6
7
8
9
10
einde
We zien dat tijdens de uitvoering van de passoperatorer gebeurt niets. Het wordt alleen als stomp gebruikt waar syntactisch noodzakelijk is. Bijvoorbeeld bij het ontwikkelen van een nieuwe klasse met methoden die niet hoeven te worden geïmplementeerd.
class MyClass (object):
def meth_a (self):
passeren
def meth_b (self):
print "I" m meth_b "
De meth_a-functie heeft nog geen eigen instructie. Maar Python vereist dat de codeblokken als, behalve, def, klasse niet leeg zijn. Anders verschijnt een foutmelding.
IndentationError: verwacht een ingesprongen blok.
In plaats daarvan kunt u Pass opgeven.
class CompileError (uitzondering):
passeren
Een ander doel van het gebruik van het wachtwoord is om expliciet niets te doen.
Dit is te zien in een ander voorbeeld van een for en pass-lus:
voor t in bereik (25):
doen (t)
als t == 20:
passeren
Dit codefragment herhaalt zich over de lijstitemsvan 0 tot 25. Ze worden beschouwd als een variabele t. Bij elke iteratie wordt een functie do () uitgevoerd. Als het nodig is dat er helemaal niets gebeurt, wordt de pass aangegeven. De do-functie geeft bijvoorbeeld 24 keer een bericht weer en slaat de instructie op t = 20 over.
Programma's met een for-lus helpen bij het maken van een reeks waarden en deze toe te wijzen aan variabelen.
Het volgende record is mogelijk:
voor i in [0, 1, 2, 3, 4, 5]:
print i ** 2
Als de lijst meer elementen zou bevatten, zou het rationeler zijn om een afzonderlijke array te maken.
array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
voor in array:
print ik
Om lijsten te maken zoals
array = [1, 2, 3, 4, 5, 6, 7, 8, 9]
, in Python is er een range () functie.De range () methode in het parametergebied heeft drie argumenten: startwaarde, einde, stap. Alleen het laatste element van de lijst is vereist. Bereik (5) betekent dus dat de array getallen van 0 tot 5 bevat. Als u een stap opgeeft, moet u het beginelement bepalen.
bereik (0, 10, 2)
We krijgen:
0, 2, 4, 6, 8, 10
Het werken met dergelijke lijsten is vergelijkbaar met numerieke lijsten. Er is bijvoorbeeld een lijst
colors = ["rood", "groen", "blauw", "geel"]
Ontwikkelaars die gewend zijn aan C kunnen de volgende functie schrijven.
voor ik binnen bereik (len (kleuren)): printkleuren [i]
De code zal zonder fouten worden uitgevoerd, maar een correcter gebruik van de for-lus ziet er als volgt uit:
colours = ["rood", "groen", "blauw", "geel"] voor kleur in kleuren: print kleur
Als u de lijst moet doorlopen van de laatste naar nul, wordt de functie reversed () gebruikt.
colours = ["rood", "groen", "blauw", "geel"] voor kleur omgekeerd (kleuren): print kleur
De volgende invoer is onjuist. Nogmaals, soortgelijke dingen kwamen uit de C-taal.
Python biedt ingebouwde enumerate () -functies voor het manipuleren van array-indexen. Ze zijn handig te gebruiken in python for loops.
Een reeks waarden wordt als argumenten beschouwd. De enumerate () functie maakt het gemakkelijk om de volgende code te gebruiken:
voor ik binnen bereik (len (L)): item = L [i] # ... bereken een resultaat op basis van item ...
Hier wordt de methode len () gebruikt. Het retourneert het aantal elementen, in dit geval array L. Veel elementen worden geaccepteerd als argument voor de functie range (). Zo definiëren we de lijst [0, ... n].
Met behulp van L [i] krijgen we toegang tot elk element van de array L.
L [0], L [1], L [2], enz.
De functie enumerate () elimineert de noodzaak om de tellervariabele b te initialiseren en maakt het gemakkelijker om naar te schrijven
voor teller, waarde in enumerate (L): print ("index:" teller, "waarde:" waarde)
Enumerate () retourneert een tegenitempaar, dus twee variabelen worden gespecificeerd met de for-lusinstructie.
De functies items () en iteritems () zijn vergelijkbaar en worden als methoden gebruikt.
d.items () d.iteritems ()
Als u leden van meerdere lijsten moet gebruiken, wordt de functie zip () gebruikt.
Het neemt lijst A en lijst B en maakt er een enkel zip-object van, dat geneste tupels bevat. Elk element van het nieuwe object voegt zich bij de leden van lijst A en B en sorteert ze op index.
zip_object [1] = [A [1], B [1]];
Als de invoer zip () 4 arrays specificeert,zip-array-elementen zullen elk 4 elementen bevatten. Het verpakken van arrays van verschillende lengtes veroorzaakt geen fout. Alleen die elementen die een waardepaar bevatten, worden in het nieuwe object geplaatst.
Zip_longest () wordt gebruikt om elk element in een tuple op te nemen, zelfs een zonder een paar.
lijst (itertools.zip_longest ((1,2,3), [4])) # [(1, 4), (2, geen), (3, geen)]
Wanneer u niet alleen de elementen van een array moet doorlopen, maar deze ook moet wijzigen, wordt de functie keys () gebruikt.
De methode dupliceert en retourneert een lijst met beschikbare woordenboeksleutels.
voor k in d.keys (): als k.startswith ("R"): del d [k]
Er is een array d. De elementen ervan worden gekopieerd met de methode keys (). Elk element is een variabele k. Het wordt verwerkt met startswith, als er een overeenkomst is, wordt het item verwijderd uit de hoofdreeks.
startswith () geeft een vlag terug die controleert of de tekenreeks begint met het opgegeven voorvoegsel. De functie heeft drie argumenten: prefix, start, end.
str.startswith (prefix [, start [, end]]) -> bool
Alleen de eerste is vereist - prefix. Het kan een string of een tupel zijn.
my_str.startswith (‘waarde’)
of
my_str.startswith ((‘waarde1’, ‘waarde2’))
Als er meerdere regels nodig zijn in het parameterveld, worden de items tussen extra haakjes () geplaatst.
Het startargument verwijst naar de index van het element metwaarmee het aftellen begint. Positieve en negatieve waarden worden ondersteund. Als start = -x, dan begint het zoeken vanaf het einde van het element bij index x. De parameter end geeft het laatste teken aan waarop het parseren van de tekenreeks moet worden gestopt. Het ondersteunt ook negatieve waarden. Als end = -x, het laatste lid van de lijst met index x vanaf het begin.
De functie endswith () werkt analoog met startswith (). Het controleert of de string eindigt met de opgegeven postfix. Het heeft het achtervoegsel van drie parameters, start, end, en retourneert ook een booleaanse waarde.
Als u elementen van twee arrays moet verbinden,de snelste manier is om de methode dict (izip (array 1, array 1)) te gebruiken. In dit geval zijn de elementen niet opeenvolgend achter elkaar gerangschikt, maar in de vorm:
'Array element 1': 'array element 2'
names = ["raymond", "rachel", "matthew"] colours = ["rood", "groen", "blauw"] d = dict (zip (namen, kleuren)) # {"matthew": "blue", "rachel": "green", "raymond": "red"}
De dict () - methode maakt een woordenboek aan, waarinwaarden worden op de bovenstaande manier geplaatst - via “:”. Een element van array 2 wordt gebruikt als de hoofdwaarde.Om het aan te roepen, moet je ernaar verwijzen met een index - de waarde van array 1.
d [‘raymond’] #rood
De functie get () wordt gebruikt om erachter te komen uit hoeveel elementen een lijst bestaat.
d.get (key, default = None)
Deze methode controleert het woordenboek d op de aanwezigheid van de sleutel en retourneert de indexsleutel [index].
colours = ["rood", "groen", "rood", "blauw", "groen", "rood"] d = {} voor kleur in kleuren: d [kleur] = d.get (kleur, 0) + 1
De methode get () is een gemakkelijkere en snellere analoog van de volgende code.
colours = ["rood", "groen", "rood", "blauw", "groen", "rood"] d = {} voor kleur in kleuren: als kleur niet in d: d [kleur] = 0 d [kleur] + = 1
Dit zijn basisvoorbeelden en mogelijke fouten van de for-lus.