Loop utasításokhoz
A Python egy for for ciklust használ az elemek listájának ismétléséhez. Ellentétben a C-vel vagy a Java-val, amelyek a for ciklust használják az érték lépésenkénti megváltoztatására, és elérnek valamit, például egy tömböt ezen érték használatával.
A ciklusok esetében a gyűjteményalapú adatstruktúrák, például listák, sorrendek és szótárak ismétlődnek.
Az alapvető szintaxis:
for value in list_of_values: # use value inside this block
Általában bármit használhat iterátor értékként, ahol az iterable bejegyzései hozzárendelhetők. Például kicsomagolhatja a sorrendet a sorrendben:
list_of_tuples = [(1,2), (3,4)] for a, b in list_of_tuples: print("a:", a, "b:", b)
Másrészről bármit áttekinthet, ami iterálható. Hívhat egy függvényt, vagy használhat egy listát literálnak.
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))
Néhány módszer a For ciklusok használatára:
Az iteráció a tartomány () függvény felett
for i in range(10): print(i)
A tartomány nem függvény, hanem egy megváltoztathatatlan szekvenciatípus. A kimenet eredményeket tartalmaz az alsó határtól, azaz a 0-tól a felső határig, azaz 10-ig, de kivéve a 10-et. Alapértelmezés szerint az alsó határ vagy a kezdő index nulla. Kimenet:
> 0 1 2 3 4 5 6 7 8 9 >
Ezenkívül megadhatjuk a szekvencia alsó határát és akár a szekvencia lépését egy második és egy harmadik paraméter hozzáadásával.
for i in range(4,10,2): #From 4 to 9 using a step of two print(i)
Kimenet:
> 4 6 8 >
xrange () függvény
Az xrange és a range többnyire teljesen megegyezik a funkcionalitás szempontjából. Mindkettő lehetővé teszi az Ön számára használható egész számok listájának létrehozását, bárhogy is tetszik. Az egyetlen különbség az, hogy a tartomány egy Python listaobjektumot, az xrange pedig egy xrange objektumot ad vissza. Ez azt jelenti, hogy az xrange valójában nem generál statikus listát futás közben, mint a tartomány. Egy speciális technikával hozza létre az értékeket, amire szüksége van. Ezt a technikát egy olyan típusú objektummal együtt használják, amely generátor néven ismert.
Még valami hozzáfűznivaló. A Python 3.x-ben az xrange függvény már nem létezik. A tartományfüggvény most azt csinálja, amit az xrange a Python 2.x-ben
Az értékek ismétlése egy listában vagy duplán
A = ["hello", 1, 65, "thank you", [2, 3]] for value in A: print(value)
Kimenet:
> hello 1 65 thank you [2, 3] >
Billentyűk ismétlése egy szótárban (más néven hashmap)
fruits_to_colors = {"apple": "#ff0000", "lemon": "#ffff00", "orange": "#ffa500"} for key in fruits_to_colors: print(key, fruits_to_colors[key])
Kimenet:
> apple #ff0000 lemon #ffff00 orange #ffa500 >
Két azonos méretű listát ismételhet meg egy hurokban a zip () függvénnyel
A = ["a", "b", "c"] B = ["a", "d", "e"] for a, b in zip(A, B): print a, b, a == b
Kimenet:
> a a True b d False c e False >
Iteráljon egy listán, és kapja meg a megfelelő indexet az enumerate () függvénnyel
A = ["this", "is", "something", "fun"] for index,word in enumerate(A): print(index, word)
Kimenet:
> 0 this 1 is 2 something 3 fun >
Gyakori eset az, hogy egy szótárban ismételgetünk:
for name, phonenumber in contacts.items(): print(name, "is reachable under", phonenumber)
Ha feltétlenül hozzáférnie kell az iteráció aktuális indexéhez, NE használja range(len(iterable))
! Ez rendkívül rossz gyakorlat, és rengeteg kuncogást vált ki a vezető Python fejlesztőktől. Használja helyette a beépített funkciót enumerate()
:
for index, item in enumerate(shopping_basket): print("Item", index, "is a", item)
for / else állításokra
A Pyhton lehetővé teszi, hogy a másikat a ciklusokkal együtt használja, a másik eset akkor kerül végrehajtásra, amikor a ciklustest egyik feltétele sem teljesült. A másik használatához ki kell használnunk egy break
utasítást, hogy egy teljesített állapotban kitörhessünk a hurokból. Ha nem törünk ki, akkor a másik rész végrehajtásra kerül.
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')
A fenti esetben a kimenet az lesz, today is not a week day
mert a cikluson belüli törés soha nem kerül végrehajtásra.
Iterál egy lista felett az inline loop funkcióval
A soron belüli iterációt is megismételhetjük python használatával, például ha egy listában szereplő összes szót nagybetűvel kell ellátnunk egy listából, egyszerűen a következőket tehetjük:
A = ["this", "is", "awesome", "shinning", "star"] UPPERCASE = [word.upper() for word in A] print (UPPERCASE)
Kimenet:
> ['THIS', 'IS', 'AWESOME', 'SHINNING', 'STAR'] >
Több információ:
- Python2 a hurok dokumentációjához
- Python3 a hurok dokumentációjához