Erweiterte Funktionen
Iteration
In einer vorgegebenen Liste oder Tupel können wir verwenden , um for
die Liste oder Tupel Zyklus zu durchlaufen, die wir nennen Traversal Iteration (Iteration).
In Python Iteration durch , for ... in
um eine vollständige und viele Sprachen wie C - Sprache, wird die Iteration Liste durch den Index, wie der Java - Code beendet:
for (i=0; i<list.length; i++) {
n = list[i];
}
Wie zu sehen ist, der Python - for
Zyklus Abstraktion als der C - for
Zyklus , weil der Python for
kann Zyklus verwendet wird Iteration nicht nur in der Tupel - Liste oder kann auch auf anderen Objekten handeln.
Obwohl diese Datentyp Liste unter dem Standard, aber vielen anderen Datentypen sind nicht unter dem Thema, aber, solange Iterables, mit oder ohne Index kann iterativ sein, wie dict iterativ sein kann:
>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> for key in d:
... print(key)
...
a
c
b
Da die Lagerung nicht dict Bestellliste in Übereinstimmung mit der Art und Weise ist, so dass das Ergebnis der Iterationsfolge wahrscheinlich anders sein soll.
Standardmäßig ist dict Iteration Schlüssel. Wenn Sie Iteration Wert wollen, kann es verwendet werden for value in d.values()
, wenn Sie Iteration Schlüssel und Wert wollen, können verwendet werden for k, v in d.items()
.
Da die Zeichenfolge Iterables ist daher kann es zu dem for - Schleife angewandt werden:
>>> for ch in 'ABC':
... print(ch)
...
A
B
C
Also, wenn wir verwenden for
die Schleife, solange die wirkt auf eine Iteration Objekt for
Schleife kann normal arbeiten, und wir kümmern uns nicht darum , ob das Objekt eine Liste oder andere Datentypen.
So, wie zu beurteilen, ein Objekt ist iterable es? Es wird durch die Art Iterable Sammlungen bestimmt Modul:
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False
Eine letzte Frage, wenn Sie wollen Index Verteilerliste erreichen , wie Java-like wie zu tun? Python Einbau- enumerate
Funktionen in einen Listenindex gedreht werden - das Element rechts, so dass Sie gleichzeitig Iteration Index und das Element selbst in einem for - Schleife:
>>> for i, value in enumerate(['A', 'B', 'C']):
... print(i, value)
...
0 A
1 B
2 C
Oberhalb for-Schleife, verweist auch zwei Variablen in Python sehr häufig, zum Beispiel der folgenden Code:
>>> for x, y in [(1, 1), (2, 4), (3, 9)]:
... print(x, y)
...
1 1
2 4
3 9
Liste der Formel
Diese Liste der Formel Listenkomprehension, ist Python eine sehr einfache , aber leistungsfähige integrierte in kann verwendet werden , um eine Liste der Formel zu erstellen.
Um zum Beispiel eine Liste zu erzeugen , [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
kann verwendet werden list(range(1, 11))
:
>>> list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Aber wenn Sie generieren möchten , [1x1, 2x2, 3x3, ..., 10x10]
wie zu tun? Die erste Schleife Methode:
>>> L = []
>>> for x in range(1, 11):
... L.append(x * x)
...
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Aber auch der Zyklus kompliziert, und die Liste der Formel mit einer Zirkulationsleitung Liste oben Anweisung generiert Fassung:
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Wenn Sie eine Liste der Formel schreiben, um das Element erzeugt werden , x * x
an die Front, gefolgt von einer for - Schleife, eine Liste heraus erstellen kann, nützlich ist , ein paar Mal zu schreiben, wird bald mit dieser Syntax vertraut sein.
auch wenn zur Bestimmung Schleife wieder hinzufügen, so dass wir nur das sogar Platz von herauszufiltern:
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
Können auch zwei Zyklen verwendet werden, kann die gesamte Anordnung erzeugt werden:
>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
Mehr als drei und eine dreifache Schleife wird selten verwendet.
Verwenden Sie die Formelliste können Sie sehr einfach Code schreiben. Zum Beispiel alle Dateien und Verzeichnisse im aktuellen Verzeichnis aufzulisten, kann durch eine Code - Zeile erreicht werden:
>>> import os # 导入os模块,模块的概念后面讲到
>>> [d for d in os.listdir('.')] # os.listdir可以列出文件和目录
['.emacs.d', '.ssh', '.Trash', 'Adlm', 'Applications', 'Desktop', 'Documents', 'Downloads', 'Library', 'Movies', 'Music', 'Pictures', 'Public', 'VirtualBox VMs', 'Workspace', 'XCode']
for
In der Tat kann, Recycling verwendet gleichzeitig zwei oder mehr Variablen, wie dict
die items()
möglichen Iterationen Schlüssel und Wert zur gleichen Zeit:
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> for k, v in d.items():
... print(k, '=', v)
...
y = B
x = A
z = C
Somit kann die Liste Formel verwendet werden zwei Variablenliste zu generieren:
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']
Endlich eine Liste aller Strings in Kleinbuchstaben:
>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']
if ... else
eine Liste der Formel der Zeit verwenden, einige Schuhe oft Kinder wissen nicht , ob ... sonst Nutzung.
Beispielsweise ist der folgende Code die auch normal:
>>> [x for x in range(1, 11) if x % 2 == 0]
[2, 4, 6, 8, 10]
Aber wir können nicht im Finale if
Plus else
:
>>> [x for x in range(1, 11) if x % 2 == 0 else 0]
File "<stdin>", line 1
[x for x in range(1, 11) if x % 2 == 0 else 0]
^
SyntaxError: invalid synta
Dies liegt daran , mit der for
Rückseite if
einer Filterbedingung kann nicht nehmen else
, oder wie man Bildschirm?
Andere Kinderschuhe fanden das if
Schreiben for
muss an die Front hinzugefügt werden else
, da sonst eine Fehlermeldung:
>>> [x if x % 2 == 0 for x in range(1, 11)]
File "<stdin>", line 1
[x if x % 2 == 0 for x in range(1, 11)]
^
SyntaxError: invalid syntax
Dies liegt daran , for
der vordere Teil ein Ausdruck ist, muss sie auf basieren x
Ergebnis der Berechnung. Daher untersuchen den Ausdruck: x if x % 2 == 0
es kann nicht auf der Grundlage werden x
die Ergebnisse der Berechnung, weil der Mangel else
, muss hinzugefügt werden else
:
>>> [x if x % 2 == 0 else -x for x in range(1, 11)]
[-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]
Oberhalb for
dem vorstehenden Ausdruck x if x % 2 == 0 else -x
kann die Basis sein , x
des Berechnungsergebnisses der Bestimmung.
Es ist in einer in der Formelliste gesehen for
vor if ... else
einem Ausdruck, und für letztere if
ist ein Filter, nicht mit else
.