Von der Schleife zum einzelnen Ausdruck
Eine sehr häufige Schleife beginnt mit einer leeren Liste und hängt pro Element ein Ergebnis an. Eine List Comprehension sagt dasselbe in einem Ausdruck in eckigen Klammern: [was_gebaut_wird for item in sammlung]. Lesen Sie sie von links nach rechts: „baue dies, für jedes Element in jenem“. Sie ist kürzer und zeigt auf einen Blick, dass das Ganze eine neue Liste ist.
prices = [184.0, 185.0, 183.0]
# The loop way
notionals = []
for price in prices:
notionals.append(price * 100)
print(notionals) # [18400.0, 18500.0, 18300.0]
# The comprehension way: the same list in one line
notionals = [price * 100 for price in prices]
print(notionals) # [18400.0, 18500.0, 18300.0]Nur manche Elemente behalten: if
Hängen Sie if condition am Ende an, um nur die Elemente zu behalten, die einen Test bestehen. So filtert man: positive Renditen, Orders über einer Größe, passende Symbole. Elemente, die den Test nicht bestehen, fallen einfach weg, und die Reihenfolge der übrigen bleibt erhalten.
# Keep only the items that pass a test
returns = [0.01, -0.02, 0.005, -0.001, 0.03]
gains = [r for r in returns if r > 0]
print(gains) # [0.01, 0.005, 0.03]Positionen und Paare
Der for-Teil funktioniert wie eine normale Schleife: Er kann range(...) durchlaufen, um Positionen zu nutzen, und beide Hälften eines Paars benennen (for symbol, price in quotes). Nutzen Sie Positionen, wenn jedes Ergebnis von einem Nachbarn abhängt, etwa eine Rendite aus dem Vorpreis; nutzen Sie Paare, wenn jedes Element mehrere Felder enthält.
# Simple returns from a price series, using positions
prices = [100.0, 102.0, 101.0]
returns = [prices[i] / prices[i - 1] - 1 for i in range(1, len(prices))]
print([round(r, 4) for r in returns]) # [0.02, -0.0098]
# Pairs can be unpacked, and the result can be transformed
quotes = [("aapl", 184.5), ("msft", 410.2), ("goog", 171.0)]
above = [symbol.upper() for symbol, price in quotes if price > 180]
print(above) # ['AAPL', 'MSFT']if/else steht vorn
Ein abschließendes if entfernt Elemente. Wollen Sie jedes Element je nach Bedingung verändern, verwenden Sie den bedingten Ausdruck a if condition else b als ersten Teil. Beides zu verwechseln ist ein häufiger Fehler: if allein steht nach dem for, if ... else davor.
# if/else changes each item; a plain if (at the end) drops items
returns = [0.01, -0.02, 0.005, -0.001, 0.03]
signals = ["long" if r > 0 else "flat" for r in returns]
print(signals) # ['long', 'flat', 'long', 'flat', 'long']for-Schleife. Wird eine Comprehension lang oder verschachtelt, zerlegen Sie sie in eine Schleife oder Hilfsfunktion: Lesbarkeit schlägt Raffinesse.[expression for item in items]: ein Ergebnis pro Element.... if conditionam Ende: nur manche Elemente behalten.a if condition else bvorn: jedes Element verändern.
Als Nächstes: Listen, die Sammlung, mit der diese Schleifen und Comprehensions gearbeitet haben: Indizierung, Slicing, Hinzufügen, Entfernen und Sortieren.
Lab: Was bewertet wird
- Mit
notionalsjeden Trade in einem Ausdruck bewerten25 Pkt. - Mit
simple_returnsPreise in Renditen umwandeln25 Pkt. - Mit
positive_returnsnur die Gewinne behalten25 Pkt. - Mit
symbols_aboveSymbole zugleich filtern und bereinigen25 Pkt.