Python Basis 7 (von der offiziellen Website von Liao Xuefeng)

Erweiterte Funktionen

Iteration

In einer vorgegebenen Liste oder Tupel können wir verwenden , um fordie Liste oder Tupel Zyklus zu durchlaufen, die wir nennen Traversal Iteration (Iteration).
In Python Iteration durch , for ... inum 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 - forZyklus Abstraktion als der C - forZyklus , weil der Python forkann 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 fordie Schleife, solange die wirkt auf eine Iteration Objekt forSchleife 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- enumerateFunktionen 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 * xan 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']

forIn der Tat kann, Recycling verwendet gleichzeitig zwei oder mehr Variablen, wie dictdie 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 ifPlus 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 forRückseite ifeiner Filterbedingung kann nicht nehmen else, oder wie man Bildschirm?
Andere Kinderschuhe fanden das ifSchreiben formuss 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 , forder vordere Teil ein Ausdruck ist, muss sie auf basieren xErgebnis der Berechnung. Daher untersuchen den Ausdruck: x if x % 2 == 0es kann nicht auf der Grundlage werden xdie 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 fordem vorstehenden Ausdruck x if x % 2 == 0 else -xkann die Basis sein , xdes Berechnungsergebnisses der Bestimmung.

Es ist in einer in der Formelliste gesehen forvor if ... elseeinem Ausdruck, und für letztere ifist ein Filter, nicht mit else.

Veröffentlicht 13 Originalarbeiten · erntete Lob 0 · Aufrufe 79

Ich denke du magst

Origin blog.csdn.net/weixin_42692164/article/details/104815327
Empfohlen
Rangfolge