List Comprehension

List Comprehensions oder Listen-Abstraktionen[1] sind syntaktische Gefüge, die beschreiben, wie vorhandene Listen oder andere iterierbare Objekte verarbeitet werden, um aus ihnen neue Listen zu erstellen.

Sie werden in einigen Programmiersprachen wie z. B. Python, Haskell, Common Lisp oder Julia unterstützt und werden in Analogie zur beschreibenden Mengenschreibweise (engl. set-builder notation) notiert.

Ähnlichkeiten zur Mengenschreibweise

Die Menge der Quadratzahlen mit geraden Basen zwischen 10 und 20 lässt sich mit der beschreibenden Mengenschreibweise folgendermaßen notieren

.

In Haskell sieht eine List Comprehension, die dieselben Bedingungen erfüllt, folgendermaßen aus:

m = [x^2 | x <-[10..20], mod x 2 == 0]

Es ist zu beachten, dass mit der Angabe [10..20] implizit angegeben wird, dass eine Teilmenge der natürlichen Zahlen in der Eingabemenge ist.

In Python benutzt man folgende Schreibweise

m = [x**2 for x in range(10,21) if x%2 == 0]

Hier gilt fast dasselbe wie bei Haskell, nur dass bei dem Initialisieren der Range-Klasse für die obere Grenze noch 1 dazuaddiert werden muss.[2]

Alle drei Notationen lassen sich in vier Teile aufgliedern:

  • Ausgabeausdruck (output expression): x^2
  • Variable: x
  • Eingabemenge (input set): die natürlichen Zahlen N
  • Prädikat/Eigenschaft (predicate): die geraden Zahlen der Eingabemenge

Mehrdimensionale Felder

Manche Programmiersprachen wie Python oder Haskell haben keine native Unterstützung für mehrdimensionale Felder. In einem solchen Fall kann man mithilfe von List Comprehensions eine Ersatzkonstruktion schaffen.

In diesem Beispiel wird eine leere 5x5-Matrixersatzkonstruktion mit Listen erstellt:

m = [[None for zeile in range(5)] for spaltenNr in range(5)] # Erstellung
m[1][4] = 4 # Element in Zeile 2, Spalte 5 mit dem Wert 4 belegen

Der Ausgabeausdruck ist ebenfalls eine List Comprehension. Es handelt sich um also eine Verschachtelung.

Die innere List Comprehension erzeugt eine Zeile aus fünf Elementen mit dem Nullwert None und die äußere List Comprehension sorgt dann dafür, dass eine Liste mit fünf Zeilen bedingungslos (ohne Prädikat) erstellt wird. Der Zugriff funktioniert dann wie bei einem gewöhnlichen mehrdimensionalen Feld.

Einzelnachweise

  1. Python-Tutorial: Listen-Abstraktion (List Comprehension)
  2. Built-in Types — Python 3.7.1 documentation

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.