Python ugnezdene zanke
V programskem jeziku Python obstajata dve vrsti zank za zanko in medtem ko zanka . Z uporabo teh zank lahko ustvarimo ugnezdene zanke v Pythonu. Ugnezdene zanke pomenijo zanke znotraj zanke. Na primer, zanka while znotraj zanke for, zanka for znotraj zanke for itd.
Python ugnezdene zanke
Sintaksa ugnezdenih zank Python:
Izraz zunanje_zanke:
Izraz notranje_zanke:
Stavek znotraj notranje_zanke
Izjava znotraj Outer_loop
Primeri ugnezdenih zank Python
Primer 1: Osnovni primer ugnezdenih zank Python
Python3
x> => [> 1> ,> 2> ]> y> => [> 4> ,> 5> ]> for> i> in> x:> > for> j> in> y:> > print> (i, j)> |
Izhod:
1 4 1 5 2 4 2 5
Python3
x> => [> 1> ,> 2> ]> y> => [> 4> ,> 5> ]> i> => 0> while> i <> len> (x) :> > j> => 0> > while> j <> len> (y) :> > print> (x[i] , y[j])> > j> => j> +> 1> > i> => i> +> 1> |
Časovna zapletenost: O(n 2 )
Pomožni prostor: O(1)
Primer 2: Tiskanje tabele množenja z uporabo ugnezdenih zank for Python
Python3
# Running outer loop from 2 to 3> for> i> in> range> (> 2> ,> 4> ):> > # Printing inside the outer loop> > # Running inner loop from 1 to 10> > for> j> in> range> (> 1> ,> 11> ):> > # Printing inside the inner loop> > print> (i,> '*'> , j,> '='> , i> *> j)> > # Printing inside the outer loop> > print> ()> |
Izhod:
2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18 2 * 10 = 20 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27 3 * 10 = 30
Časovna zapletenost: O(n 2 )
Pomožni prostor: O(1)
V zgornjem primeru vzamemo zunanjo zanko for, ki teče od 2 do 3 za tabelo množenja 2 in 3, nato pa znotraj te zanke vzamemo notranjo zanko for, ki bo potekala od 1 do 10, znotraj katere tiskamo množenje tabelo z množenjem vsake iteracijske vrednosti notranje zanke z ponovitev vrednost zunanje zanke, kot vidimo v spodnjem rezultatu.
Primer 3: Tiskanje z uporabo različnih notranjih in zunanjih ugnezdenih zank
Python3
# Initialize list1 and list2> # with some strings> list1> => [> 'I am '> ,> 'You are '> ]> list2> => [> 'healthy'> ,> 'fine'> ,> 'geek'> ]> # Store length of list2 in list2_size> list2_size> => len> (list2)> # Running outer for loop to> # iterate through a list1.> for> item> in> list1:> > > # Printing outside inner loop> > print> (> 'start outer for loop '> )> > # Initialize counter i with 0> > i> => 0> > # Running inner While loop to> > # iterate through a list2.> > while> (i # Printing inside inner loop print(item, list2[i]) # Incrementing the value of i i = i+1 # Printing outside inner loop print('end for loop ')> |
Izhod:
start outer for loop I am healthy I am fine I am geek end for loop start outer for loop You are healthy You are fine You are geek end for loop
Časovna zapletenost: O(n 2 )
Pomožni prostor: O(1)
V tem primeru inicializiramo dva seznama z nekaj nizi. Shranite velikost list2 v 'list2_Size' s funkcijo len() in jo uporabite v zanki while kot števec. Po tem zaženite zunanjo zanko for ponovite seznam1 in znotraj te zanke zaženite notranjo zanko while za ponavljanje seznama2 z uporabo indeksiranja seznama, znotraj katerega natisnemo vsako vrednost seznama2 za vsako vrednost seznama1.
Uporaba stavka break v ugnezdenih zankah
Je vrsta stavka za nadzor zanke. V zanki lahko uporabimo izjava o prekinitvi za izhod iz zanke. Ko v zanki uporabimo prekinitveni stavek, ta preskoči preostanek ponovitve in prekine zanko. razumejmo to na primeru.
Koda:
Python3
# Running outer loop from 2 to 3> for> i> in> range> (> 2> ,> 4> ):> > # Printing inside the outer loop> > # Running inner loop from 1 to 10> > for> j> in> range> (> 1> ,> 11> ):> > if> i> => => j:> > break> > # Printing inside the inner loop> > print> (i,> '*'> , j,> '='> , i> *> j)> > # Printing inside the outer loop> > print> ()> |
Izhod:
2 * 1 = 2 3 * 1 = 3 3 * 2 = 6
Časovna zapletenost: O(n 2 )
Pomožni prostor: O(1)
Zgornja koda je enaka kot v primeru 2. V tej kodi uporabljamo prekinitveni stavek znotraj notranje zanke z uporabo izjava if . Znotraj notranje zanke, če 'i' postane enak 'j', bo notranja zanka prekinjena in ne bo izvedena, preostali del ponovitve, kot lahko vidimo v izhodni tabeli 3, je natisnjen do dveh ponovitev, ker je v naslednji ponovitvi 'i' postane enak 'j' in zanka se prekine.
Uporaba stavka za nadaljevanje v ugnezdenih zankah
Stavek za nadaljevanje je tudi vrsta stavka za nadzor zanke. Je ravno nasprotno od izjave o prelomu. Stavek continue prisili zanko, da skoči na naslednjo ponovitev zanke, medtem ko stavek break prekine zanko. Razumejmo to z uporabo kode.
Python3
# Running outer loop from 2 to 3> for> i> in> range> (> 2> ,> 4> ):> > # Printing inside the outer loop> > # Running inner loop from 1 to 10> > for> j> in> range> (> 1> ,> 11> ):> > if> i> => => j:> > continue> > # Printing inside the inner loop> > print> (i,> '*'> , j,> '='> , i> *> j)> > # Printing inside the outer loop> > print> ()> |
Izhod:
2 * 1 = 2 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10 2 * 6 = 12 2 * 7 = 14 2 * 8 = 16 2 * 9 = 18 2 * 10 = 20 3 * 1 = 3 3 * 2 = 6 3 * 4 = 12 3 * 5 = 15 3 * 6 = 18 3 * 7 = 21 3 * 8 = 24 3 * 9 = 27 3 * 10 = 30
Časovna zapletenost: O(n 2 )
Pomožni prostor: O(1)
V zgornji kodi namesto stavka break uporabljamo stavek continue. Tukaj, ko 'i' postane enak 'j' v notranji zanki, preskoči preostanek kode v notranji zanki in skoči na naslednjo ponovitev, kot vidimo v izhodu 2 * 2 = 4 in 3 * 3 = 9 je ni natisnjeno, ker na tej točki 'i' postane enak 'j'.
Enovrstične ugnezdene zanke z uporabo seznamskega razumevanja
Za pretvorbo večvrstičnih ugnezdenih zank v eno vrstico bomo uporabili razumevanje seznamov v Pythonu . Razumevanje seznama vključuje oklepaje, sestavljene iz izraza, ki se izvede za vsak element, in zanke for za ponavljanje vsakega elementa na seznamu.
Sintaksa za razumevanje seznama:
newList = [ izraz (element) za element v oldList če stanje ]
Koda:
Python3
# Using list comprehension to make> # nested loop statement in single line.> list1> => [[j> for> j> in> range> (> 3> )]> > for> i> in> range> (> 5> )]> # Printing list1> print> (list1)> |
Izhod:
[[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]
V zgornji kodi shranjujemo seznam znotraj seznama z uporabo razumevanja seznama v notranji zanki razumevanja seznama [j za j v obsegu (3)], da naredimo seznam [0, 1, 2] za vsako ponovitev zunanjega zanka za i v območju (5).
Časovna zapletenost: O(n 2 ) Je hitrejši od ugnezdenih zank
Pomožni prostor: O(n)