Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
1 Einleitung
2 Überblick über Python
3 Die Arbeit mit Python
4 Der interaktive Modus
5 Grundlegendes zu Python-Programmen
6 Kontrollstrukturen
7 Das Laufzeitmodell
8 Basisdatentypen
9 Benutzerinteraktion und Dateizugriff
10 Funktionen
11 Modularisierung
12 Objektorientierung
13 Weitere Spracheigenschaften
14 Mathematik
15 Strings
16 Datum und Zeit
17 Schnittstelle zum Betriebssystem
18 Parallele Programmierung
19 Datenspeicherung
20 Netzwerkkommunikation
21 Debugging
22 Distribution von Python-Projekten
23 Optimierung
24 Grafische Benutzeroberflächen
25 Python als serverseitige Programmiersprache im WWW mit Django
26 Anbindung an andere Programmiersprachen
27 Insiderwissen
28 Zukunft von Python
A Anhang
Stichwort

Download:
- ZIP, ca. 4,8 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Python von Peter Kaiser, Johannes Ernesti
Das umfassende Handbuch - Aktuell zu Python 2.5
Buch: Python

Python
gebunden, mit CD
819 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1110-9
Pfeil 13 Weitere Spracheigenschaften
  Pfeil 13.1 Exception Handling
    Pfeil 13.1.1 Eingebaute Exceptions
    Pfeil 13.1.2 Werfen einer Exception
    Pfeil 13.1.3 Abfangen einer Exception
    Pfeil 13.1.4 Eigene Exceptions
    Pfeil 13.1.5 Erneutes Werfen einer Exception
  Pfeil 13.2 List Comprehensions
  Pfeil 13.3 Docstrings
  Pfeil 13.4 Generatoren
  Pfeil 13.5 Iteratoren
  Pfeil 13.6 Interpreter im Interpreter
  Pfeil 13.7 Geplante Sprachelemente
  Pfeil 13.8 Die with-Anweisung
  Pfeil 13.9 Function Decorator
  Pfeil 13.10 assert
  Pfeil 13.11 Weitere Aspekte der Syntax
    Pfeil 13.11.1 Umbrechen langer Zeilen
    Pfeil 13.11.2 Zusammenfügen mehrerer Zeilen
    Pfeil 13.11.3 String conversions


Galileo Computing - Zum Seitenanfang

13.2 List Comprehensions  topZur vorigen Überschrift

Es ist ein häufig auftretendes Problem, dass man aus den Elementen einer bestehenden Liste eine neue Liste erstellen möchte, deren Elemente aus denen der alten Liste berechnet wurden. Bislang würden Sie dies entweder sehr umständlich in einer for-Schleife erledigen oder die Built-in Functions map und filter einsetzen. Letzteres ist zwar relativ kurz, bedarf jedoch einer Funktion, die auf jedes Element der Liste angewandt wird. Das ist umständlich und ineffizient.

Python unterstützt eine sehr viel flexiblere Syntax, die für gerade diesen Zweck geschaffen wurde: die sogenannten List Comprehensions. Die folgende List Comprehension erzeugt aus einer Liste mit ganzen Zahlen eine neue Liste, die die Quadrate dieser Zahlen enthält:

>>> lst = [1,2,3,4,5,6,7,8,9] 
>>> [x**2 for x in lst] 
[1, 4, 9, 16, 25, 36, 49, 64, 81]

Eine List Comprehension wird in eckige Klammern gefasst und besteht zunächst aus einem Ausdruck, gefolgt von beliebig vielen for/in-Bereichen. Ein for/in-Bereich lehnt sich an die Syntax der for-Schleife an und gibt an, mit welchem Bezeichner über welche Liste iteriert wird – in diesem Fall mit dem Bezeichner x über die Liste lst. Der angegebene Bezeichner kann im Ausdruck zu Beginn der List Comprehension verwendet werden. Das Ergebnis einer List Comprehension ist eine neue Liste, die als Elemente die Ergebnisse des Ausdrucks in jedem Iterationsschritt enthält. Die Funktionsweise der obigen List Comprehension lässt sich folgendermaßen zusammenfassen:

Für jedes Element x der Liste lst, bilde das Quadrat von x, und füge das Ergebnis in die Ergebnisliste ein.

Dies ist die einfachste Form der List Comprehension. Der for/in-Bereich lässt sich um eine Fallunterscheidung erweitern, sodass nur bestimmte Elemente in die neue Liste übernommen werden. So könnten wir die obige List Comprehension beispielsweise dahingehend erweitern, dass nur die Quadrate gerader Zahlen gebildet werden:

>>> lst = [1,2,3,4,5,6,7,8,9] 
>>> [x**2 for x in lst if x%2 == 0] 
[4, 16, 36, 64]

Dazu wird der for/in-Bereich um das Schlüsselwort if erweitert, auf das eine Bedingung folgt. Nur wenn diese Bedingung True ergibt, wird das berechnete Element in die Ergebnisliste aufgenommen. Diese Form der List Comprehension lässt sich also folgendermaßen beschreiben:

Für jedes Element x der Liste lst – sofern es sich bei x um eine gerade Zahl handelt –, bilde das Quadrat von x, und füge das Ergebnis in die Ergebnisliste ein.

Als nächstes Beispiel soll eine List Comprehension dazu verwendet werden, zwei als Listen dargestellte Vektoren zu addieren. Die Addition zweier Vektoren erfolgt koordinatenweise, also in unserem Fall Element für Element:

>>> v1 = [1, 7, -5] 
>>> v2 = [-9, 3, 12] 
>>> [v1[i] + v2[i] for i in range(3)] 
[-8, 10, 7]

Dazu wird eine von range erzeugte Liste von Indizes in der List Comprehension durchlaufen. In jedem Durchlauf werden die jeweiligen Koordinaten addiert und an die Ergebnisliste angehängt.

Es wurde bereits gesagt, dass eine List Comprehension beliebig viele for/in-Bereiche haben kann. Diese können wie verschachtelte for-Schleifen betrachtet werden. Im Folgenden möchten wir ein Beispiel besprechen, in dem diese Eigenschaft von Nutzen ist. Zunächst definieren wir zwei Listen:

>>> lst1 = ["A", "B", "C"] 
>>> lst2 = ["D", "E", "F"]

Eine List Comprehension soll nun eine Liste erstellen, die alle möglichen Buchstabenkombinationen enthält, die gebildet werden können, indem man zunächst einen Buchstaben aus lst1 und dann einen aus lst2 wählt. Die Kombinationen sollen jeweils als Tupel in der Liste stehen:

>>> [(a,b) for a in lst1 for b in lst2] 
[('A', 'D'), ('A', 'E'), ('A', 'F'), ('B', 'D'), ('B', 'E'), ('B',  
'F'), ('C', 'D'), ('C', 'E'), ('C', 'F')]

Diese List Comprehension kann folgendermaßen beschrieben werden:

Für jedes Element a der Liste lst1, gehe über alle Elemente b von lst2, und füge jeweils das Tupel (a, b) in die Ergebnisliste ein.

List Comprehensions bieten einen interessanten und eleganten Weg, um sehr komplexe Operationen platzsparend zu schreiben. Besonders möchten wir noch einmal auf die Effizienz von List Comprehensions hinweisen. So kann eine List Comprehension stets schneller ausgeführt werden als beispielsweise eine äquivalente for-Schleife.

Viele Probleme, in denen List Comprehensions zum Einsatz kommen, könnten auch durch die Built-in Functions map, filter oder durch eine Kombination der beiden gelöst werden, jedoch sind List Comprehensions zumeist besser lesbar und führen zu einem übersichtlicheren Quellcode.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: Python






Python
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Linux






 Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Praxisbuch Web 2.0






 Praxisbuch Web 2.0


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Praxisbuch Objektorientierung






 Praxisbuch Objektorientierung


Zum Katalog: Einstieg in SQL






 Einstieg in SQL


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de