Silmukoille Pythonissa

Silmukka-lauseita varten

Python käyttää for-silmukkaa iteroidakseen elementtiluettelon. Toisin kuin C tai Java, jotka käyttävät for -silmukkaa muuttamaan arvoa vaiheittain ja käyttämään jotain, kuten taulukkoa, joka käyttää kyseistä arvoa.

Silmukat toistavat kokoelmaan perustuvia tietorakenteita, kuten luetteloita, sarakkeita ja sanakirjoja.

Perussyntaksi on:

for value in list_of_values: # use value inside this block

Yleensä voit käyttää mitä tahansa iteraattorin arvona, johon iterable-merkinnät voidaan osoittaa. Voit esimerkiksi purkaa lohkot pakkausten luettelosta:

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

Toisaalta voit käydä läpi kaiken iteroitavan. Voit kutsua funktion tai käyttää luettelon kirjainta.

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))

Joitakin tapoja For-silmukoille käytetään:

Toista alueen () funktio

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

Sen sijaan, että alue olisi funktio, alue on itse asiassa muuttumaton sekvenssityyppi. Lähtö sisältää tulokset alarajasta eli 0: sta ylärajaan, ts. 10, mutta lukuun ottamatta arvoa 10. Oletusarvoisesti alaraja tai aloitusindeksi on nolla. Tuotos:

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

Lisäksi voidaan määrittää sekvenssin alaraja ja jopa sekvenssin vaihe lisäämällä toinen ja kolmas parametri.

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

Tuotos:

> 4 6 8 >

xrange () -toiminto

Suurimmaksi osaksi xrange ja alue ovat toiminnallisuuden suhteen täsmälleen samat. Molemmat tarjoavat tavan luoda luettelo kokonaisluvuista, joita voit käyttää, niin kuin haluat. Ainoa ero on, että alue palauttaa Python-luettelo-objektin ja xrange palauttaa xrange-objektin. Se tarkoittaa, että xrange ei tosiasiallisesti luo staattista luetteloa ajon aikana, kuten alue tekee. Se luo arvot tarpeen mukaan erityisellä tekniikalla, jota kutsutaan tuottamiseksi. Tätä tekniikkaa käytetään sellaisen objektityypin kanssa, joka tunnetaan nimellä generaattorit.

Vielä yksi asia lisätä. Python 3.x: ssä xrange-toimintoa ei ole enää olemassa. Aluefunktio tekee nyt sen, mitä xrange tekee Python 2.x: ssä

Toista arvot luettelossa tai kaksinkertaisena

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

Tuotos:

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

Toista avaimet sanakirjassa (alias hashmap)

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

Tuotos:

> apple #ff0000 lemon #ffff00 orange #ffa500 >

Toista kaksi samankokoista luetteloa yhdessä silmukassa zip () -toiminnon avulla

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

Tuotos:

> a a True b d False c e False >

Toista luettelo ja hanki vastaava hakemisto enumerate () -toiminnolla

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

Tuotos:

> 0 this 1 is 2 something 3 fun >

Yleinen käyttötapaus on iterointi sanakirjan yli:

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

Jos sinun on ehdottomasti käytettävä iteraation nykyistä hakemistoa, ÄLÄ käytä range(len(iterable))! Tämä on erittäin huono käytäntö ja saa sinut paljon nauramaan vanhemmilta Python-kehittäjiltä. Käytä sen enumerate()sijaan sisäänrakennettua toimintoa :

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

for / else-lauseet

Pyhton sallii sinun käyttää muuta silmukoiden kanssa, toinen tapaus suoritetaan, kun mikään silmukan rungon ehdoista ei täyty. Jos haluat käyttää muuta, meidän on käytettävä breaklausetta, jotta voimme irtautua silmukasta tyydyttävällä ehdolla. Jos emme poistu, toinen osa suoritetaan.

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')

Edellä olevassa tapauksessa lähtö on, today is not a week daykoska silmukan sisäistä taukoa ei koskaan suoriteta.

Toista luettelon sisällä käyttämällä inline loop -toimintoa

Voisimme myös iteroida inline käyttämällä pythonia, esimerkiksi jos meidän on lisättävä kaikki luettelon sanat isoilla kirjaimilla, voimme yksinkertaisesti tehdä seuraavan:

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

Tuotos:

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

Lisää tietoa:

  • Python2 silmukan dokumentointia varten
  • Python3 silmukan dokumentointia varten