In diesem Artikel werden wir vier verschiedene Methoden zur Listenfilterung in Python untersuchen: Iteration, die filter-Funktion, List Comprehension und die itertools-Bibliothek. Jede Methode hat ihre eigenen Stärken und Schwächen, wodurch sie für unterschiedliche Szenarien und Anwendungsfälle geeignet sind.
Vorgestellt werden die Schleife mit Zählvariable (for-Schleife), die kopfgesteuerte Schleife (while-Schleife) und die fußgesteuerte Schleife (do-while-Schleife). Ihre Behandlung erfolgt aber nur exemplarisch an typischen Anwendungen. Eine detailliertere Behandlung findet sich im entsprechenden Kapitel zu C++.
Im dritten Teil über die Familie der apply-Funktionen werden zwei Gruppen von Funktionen vorgestellt: Zum Einen Funktionen für Wiederholungen (entweder Objekte oder Anweisungen), wodurch viele einfache Schleifen ersetzt werden können. Zum Anderen Funktionen, die Daten zuerst gruppieren und dann erst verarbeiten; hier werden zahlreiche Querverbindungen zu Dataframes und Faktoren hergestellt. Zur ersten Gruppe gehören rep() und replicate(), zur zweiten Gruppe ave(), by() und aggregate(), die alle sehr nahe verwandt sind mit tapply().
In der Familie der apply-Funktionen gibt es mehrere Vertreter, mit den über die Elemente einer Liste iteriert werden kann, wobei auf jede Komponente eine Funktion f() angewendet wird. Besprochen werden lapply(), sapply(), vapply() und rapply(). Die Funktion lapply() ist dabei der grundlegende Vertreter, der die bei der Iteration entstehenden Rückgabewerte wieder zu einer Liste zusammensetzt. Dagegen versucht sapply() einen möglichst einfachen Rückgabewert zu erzeugen (Vektor oder Feld). Der Funktion vapply() kann eine Vorlage für den Rückgabewert übergeben werden, so dass man bessere Kontrolle für weitere Berechnungen hat. Mit rapply() können bestimmte Datentypen aus einer Liste selektiert werden und nur auf diese wird die Funktion f() angewendet; zudem wird die Anwendung von f() rekursiv an die Komponenten der Liste weitergereicht.
Die Funktion apply() erlaubt es, über die Zeilen beziehungsweise Spalten einer Matrix zu iterieren und dabei eine Funktion FUN auf die Zeilen oder Spalten anzuwenden. Dabei entstehen leichter verständliche Quelltexte als bei den gleichwertigen Schleifen. Die Arbeitsweise der Funktion apply() kann man in drei Phasen unterteilen: split, apply, combine (Aufspalten der Matrix, Anwenden der Funktion FUN auf die Teile, Zusammensetzen der einzelnen Rückgabewerte zum Rückgabewert von apply()). Diese drei Phasen werden ausführlich erklärt und damit die Diskussion weiterer mit apply() verwandter Funktionen vorbereitet.
Die while-Schleife und die repeat-Schleife sind etwas allgemeiner als die for-Schleife. Wenn man weiß, wie oft eine Schleife durchlaufen werden soll, ist die for-Schleife weniger fehleranfällig einzusetzen. Ist dagegen nur die Bedingung bekannt, unter die Schleife verlassen werden soll, muss man die while- oder repeat-Schleife einsetzen. Die while-Schleife realisiert die kopfgesteuerte Schleife, die repeat-Schleife besitzt keine Bedingungsprüfung. Wie bei der for-Schleife können die Schlüsselwörter break (vorzeitiges Verlassen der Schleife) und next (sofortiger Übergang zum nächsten Schleifen-Durchlauf) eingesetzt werden.
Schleifen mit einer Zählvariable werden eingesetzt, wenn bekannt ist, wie oft ein gewisser Vorgang wiederholt werden muss (wobei die Anweisungen nicht exakt identisch sind, sondern meist vom Wert der Zählvariable abhängen). Die Syntax der for-Schleife sowie einige mit ihr verbundene Spitzfindigkeiten werden erklärt. Zusätzliche Kontrolle über den Ablauf einer Schleife erhält man durch break (vorzeitiges Verlassen der Schleife) und next (sofortiger Übergang zum nächsten Wert der Zählvariable).
Die umgangssprachliche Formulierung eines Algorithmus sollte man nur verwenden, um sich zu übereugen, ob man die Problemstellung verstanden hat. Um die Strukturelemente eines Algorithmus hervorzuheben und damit die Programmierung vorzubereiten, ist eine Formulierung im Pseudocode vorzuziehen. Damit ist man schon näher an einer formalen Sprache, in der eine strenge Syntax eingehalten werden muss und Mehrdeutigkeiten wie in einer natürlichen Sprache nicht vorkommen.
Wie im entsprechenden Kapitel zur Einführung in die Programmierung werden hier die kopfgesteuerte Schleife, die fußgesteuerte Schleife und die Schleife mit Zählvariable besprochen und einige Spitzfindigkeiten erklärt, die die C++-Syntax dazu bereithält. Weiter wird anhand der Schleifen das sehr viel weiter reichende Konzept des Gültigkeitsbereiches (scope) einer Variable vorgestellt.
Inhalt und Lernziele des Kapitels Einführung in C++.
Als Strukturelemente von Algorithmen werden diejenigen Muster bezeichnet, nach denen die Befehle eines Algorithmus verknüpft werden können. Hier werden die Strukturelemente zunächst allgemein vorgestellt; später werden Beispiele im Pseudocode und in speziellen Programmiersprachen angegeben.