Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
Python in seiner raffiniertesten Form Python Tipps und Tricks mit fortgeschrittenem Niveau Problemlösungen für den Programmieralltag NumPy-Grundlagen Python One-Liners zeigt Ihnen, wie man "One Liners", Einzeiler, liest und schreibt: prägnante Ausdrücke zu nützlicher Funktionalität, verpackt in einer einzigen Codezeile. Sie lernen systematisch jede Zeile von Python-Code zu entschlüsseln und zu verstehen, und werden wie ein Experte eloquentes, stark komprimiertes Python schreiben. In den fünf Kapiteln des Buches werden Tipps und Tricks, reguläre Ausdrücke, Machine Learning, Kernthemen der Datenwissenschaft und hilfreiche Algorithmen behandelt. Die ausführlichen Erläuterungen von Einzeilern führen in wichtige Konzepte der Informatik ein und fördern Ihre Programmier- und Analysefähigkeiten. Sie lernen fortgeschrittene Python-Funktionen wie Listenverständnis, Slicing, Lambda-Funktionen, reguläre Ausdrücke, Map- und Reduce-Funktionen und Slice-Zuweisungen kennen. Sie erwerben darüber hinaus Kenntnisse in diesen Bereichen: - Nutzung von Datenstrukturen zur Lösung von Problemen aus der realen Welt, wie z. B. die Verwendung boolescher Indizierung zum Auffinden von Städten mit überdurchschnittlicher Umweltverschmutzung. - Verwendung der NumPy-Grundlagen wie Array, Form, Achse, Typ, Broadcasting, fortgeschrittene Indizierung, Slicing, Sortierung, Suche, Aggregation und Statistik. - Berechnen Sie grundlegende Statistiken von mehrdimensionalen Datenfeldern und die K-Means-Algorithmen für unsupervised Learning. - Erstellen Sie fortgeschrittenere reguläre Ausdrücke unter Verwendung von Gruppierungs- und benannten Gruppen, negativen Lookaheads, maskierten Zeichen, Leerzeichen, Zeichensätzen (und negativen Zeichensätzen) und greedy/non greedy Operatoren. - Ein breites Spektrum von Informatik-Themen verstehen, einschließlich Anagramme, Palindrome, Obermengen, Permutationen, Fakultäten, Primzahlen, Fibonacci-Zahlen, Obfuszierung, Suche und algorithmische Sortierung. Am Ende des Buches werden Sie wissen, wie man Python in seiner raffiniertesten Form schreibt und prägnante, schöne Python-Kunstwerke in nur einer einzigen Zeile schafft.
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 295
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
Christian Mayer hat einen Doktortitel in Informatik und ist der Gründer der beliebten Python-Site Finxter (https://blog.finxter.com). Mayer ist außerdem der Autor der Coffee Break Python-Reihe.
Zu diesem Buch – sowie zu vielen weiteren dpunkt.büchern – können Sie auch das entsprechende E-Book im PDF-Format herunterladen. Werden Sie dazu einfach Mitglied bei dpunkt.plus+:
www.dpunkt.plus
Christian Mayer
Profi-Programmierung durch kurz gefasstes Python
Christian Mayer
Lektorat: Gabriel Neumann
Lektoratsassistenz: Anja Weimer
Übersetzung: Kathrin Lichtenberg
Copy-Editing: Claudia Lötschert, www.richtiger-text.de
Satz: Veronika Schnabel
Herstellung: Stefanie Weidner
Umschlaggestaltung: Helmut Kraus, www.exclam.de
Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
ISBN:
Print 978-3-86490-805-7
PDF 978-3-96910-114-8
ePub 978-3-96910-115-5
mobi 978-3-96910-116-2
1. Auflage 2021
Translation Copyright für die deutschsprachige Ausgabe © 2021 dpunkt.verlag GmbH
Wieblinger Weg 17
69123 Heidelberg
Copyright © 2020 by Christian Mayer. Title of English-language original: »Python One-Liners: Write Concise, Eloquent Python Like a Professional«, ISBN 978-1-7185-0050-1, published by No Starch Press. German-language edition copyright © 2021 by dpunkt.verlag GmbH. All rights reserved.
Hinweis:Dieses Buch wurde auf PEFC-zertifiziertem Papier aus nachhaltiger Waldwirtschaft gedruckt. Der Umwelt zuliebe verzichten wir zusätzlich auf die Einschweißfolie.
Schreiben Sie uns:Falls Sie Anregungen, Wünsche und Kommentare haben, lassen Sie es uns wissen: [email protected].
Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.
Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.
Alle Angaben und Programme in diesem Buch wurden mit größter Sorgfalt kontrolliert. Weder Autor noch Verlag noch Übersetzer können jedoch für Schäden haftbar gemacht werden, die in Zusammenhang mit der Verwendung dieses Buches stehen.
5 4 3 2 1 0
Danksagung
Zur deutschen Ausgabe
Vorwort
Einführung
Ein Beispiel für einen Python-Einzeiler
Ein Hinweis zur Lesbarkeit
An wen richtet sich dieses Buch?
Was werden Sie lernen?
Online-Ressourcen
1Python-Auffrischungskurs
Grundlegende Datenstrukturen
Numerische Datentypen und -strukturen
Boolesche Werte
Strings
Das Schlüsselwort None
Container-Datenstrukturen
Listen
Stacks
Mengen
Dictionaries
Zugehörigkeit
List und d
Kontrollfluss
if, else und elif
Schleifen
Funktionen
Lambdas
Zusammenfassung
2Python-Tricks
Mit einer List Comprehension Spitzenverdiener finden
Die Grundlagen
Der Code
Wie es funktioniert
Mit einer List Comprehension Wörter mit hohem Informationsgehalt finden
Die Grundlagen
Der Code
Wie es funktioniert
Eine Datei lesen
Die Grundlagen
Der Code
Wie es funktioniert
Lambda- und Map-Funktionen verwenden
Die Grundlagen
Der Code
Wie es funktioniert
Mit Slicing passende Teilstring-Umgebungen extrahieren
Die Grundlagen
Der Code
Wie es funktioniert
List Comprehension und Slicing miteinander kombinieren
Die Grundlagen
Der Code
Wie es funktioniert
Nutzen Sie die Slice-Zuweisung zum Korrigieren von kaputten Listen
Die Grundlagen
Der Code
Wie es funktioniert
Herzgesundheitsdaten mit Listenverkettungen analysieren
Die Grundlagen
Der Code
Wie es funktioniert
Mithilfe von Generatorausdrücken Unternehmen finden, die den Mindestlohn unterschreiten
Die Grundlagen
Der Code
Wie es funktioniert
Datenbanken mit der zip()-Funktion formatieren
Die Grundlagen
Der Code
Wie es funktioniert
Zusammenfassung
3Data Science
Einfache zweidimensionale Array-Berechnungen
Die Grundlagen
Der Code
Wie es funktioniert
Mit NumPy-Arrays arbeiten: Slicing, Broadcasting und Array-Typen
Die Grundlagen
Der Code
Wie es funktioniert
Bedingte Array-Suche, Filterung und Broadcasting zum Erkennen von Extremwerten
Die Grundlagen
Der Code
Wie es funktioniert
Boolesche Indizierung zum Filtern zweidimensionaler Arrays
Die Grundlagen
Der Code
Wie es funktioniert
Broadcasting, Slice-Zuweisung und Umformen, um jedes i-te Array-Element zu entfernen
Die Grundlagen
Der Code
Wie es funktioniert
Wann Sie die sort()-Funktion und wann Sie die argsort()-Funktion in NumPy benutzen
Die Grundlagen
Der Code
Wie es funktioniert
Wie Sie mit Lambda-Funktionen und boolescher Indizierung Arrays filtern
Die Grundlagen
Der Code
Wie es funktioniert
Wie Sie erweiterte Array-Filter mit Statistik, Mathematik und Logik herstellen
Die Grundlagen
Der Code
Wie es funktioniert
Einfache Assoziationsanalyse: Menschen, die X gekauft haben, kauften auch Y
Die Grundlagen
Der Code
Wie es funktioniert
Komplexere Assoziationsanalyse zum Finden von Bestseller-Paketen
Die Grundlagen
Der Code
Wie es funktioniert
Zusammenfassung
4Machine Learning
Die Grundlagen des Supervised Machine Learning
Trainingsphase
Inferenzphase
Lineare Regression
Die Grundlagen
Der Code
Wie es funktioniert
Logistische Regression in einer Zeile
Die Grundlagen
Der Code
Wie es funktioniert
K-Means-Clusteranalyse in einer Zeile
Die Grundlagen
Der Code
Wie es funktioniert
K-Nearest Neighbors in einer Zeile
Die Grundlagen
Der Code
Wie es funktioniert
Analyse neuronaler Netzwerke in einer Zeile
Die Grundlagen
Der Code
Wie es funktioniert
Decision-Tree Learning in einer Zeile
Die Grundlagen
Der Code
Wie es funktioniert
Die minimale Varianz einer Zeile berechnen
Die Grundlagen
Der Code
Wie es funktioniert
Einfache Statistiken in einer Zeile
Die Grundlagen
Der Code
Wie es funktioniert
Klassifikation mit Support-Vector Machines in einer Zeile
Die Grundlagen
Der Code
Wie es funktioniert
Klassifikation mit Random Forests in einer Zeile
Die Grundlagen
Der Code
Wie es funktioniert
Zusammenfassung
5Reguläre Ausdrücke
Einfache Textmuster in Strings finden
Die Grundlagen
Der Code
Wie es funktioniert
Schreiben Sie Ihren ersten Web-Scraper mit regulären Ausdrücken
Die Grundlagen
Der Code
Wie es funktioniert
Hyperlinks von HTML-Dokumenten analysieren
Die Grundlagen
Der Code
Wie es funktioniert
Dollars aus einem String extrahieren
Die Grundlagen
Der Code
Wie es funktioniert
Unsichere HTTP-URLs finden
Die Grundlagen
Der Code
Wie es funktioniert
Das Zeitformat der Benutzereingabe validieren, Teil 1
Die Grundlagen
Der Code
Wie es funktioniert
Das Zeitformat der Benutzereingabe validieren, Teil 2
Die Grundlagen
Der Code
Wie es funktioniert
Duplikate in String entdecken
Die Grundlagen
Der Code
Wie es funktioniert
Wortwiederholungen erkennen
Die Grundlagen
Der Code
Wie es funktioniert
Regex-Muster in einem mehrzeiligen String modifizieren
Die Grundlagen
Der Code
Wie es funktioniert
Zusammenfassung
6Algorithmen
Mit Lambda-Funktionen und Sortieren Anagramme finden
Die Grundlagen
Der Code
Wie es funktioniert
Mit Lambda-Funktionen und negativem Slicing Palindrome finden
Die Grundlagen
Der Code
Wie es funktioniert
Permutationen zählen mit rekursiven Fakultätsfunktionen
Die Grundlagen
Der Code
Wie es funktioniert
Die Levenshtein-Distanz finden
Die Grundlagen
Der Code
Wie es funktioniert
Berechnen der Potenzmenge mittels funktionaler Programmierung
Die Grundlagen
Der Code
Wie es funktioniert
Caesar-Verschlüsselung mittels erweiterter Indizierung und List Comprehension
Die Grundlagen
Der Code
Wie es funktioniert
Mit dem Sieb des Eratosthenes Primzahlen finden
Die Grundlagen
Der Code
Wie es funktioniert
Berechnen der Fibonacci-Folge mit der reduce()-Funktion
Die Grundlagen
Der Code
Wie es funktioniert
Ein rekursiver binärer Suchalgorithmus
Die Grundlagen
Der Code
Wie es funktioniert
Ein rekursiver Quicksort-Algorithmus
Die Grundlagen
Der Code
Wie es funktioniert
Zusammenfassung
Nachwort
Index
Python One-Liners ist das Resultat von mehr als eintausend Zeitstunden Arbeit – einen großen Teil davon leisteten die Mitarbeiter des in San Francisco ansässigen Verlags No Starch Press. Mein besonderer Dank gilt dem Verlagsleiter Bill Pollock für seine Einladung, dieses Buch zu schreiben. Die brillanten Lektorinnen Liz Chadwick, Alex Freed und Janelle Ludowise brachten meine groben Entwürfe in eine besser lesbare Form. Dank Liz, Alex und Janelle erreichte Python One-Liners ein Maß an Klarheit, das ich allein nicht hätte erreichen können.
Professor Daniel Zingaro – Autor des populären Buchs Algorithmic Thinking – nutzte seine tiefgehenden Informatikkenntnisse, um meine Ungenauigkeiten in Text und Code zu beseitigen. Ohne seine Bemühungen hielten Sie jetzt ein Buch in ihren Händen, das nicht nur mehr Fehler enthielte, sondern auch schwerer zu lesen wäre. Selbstverständlich verbleiben alle übrigen Ungenauigkeiten meine eigenen.
Zu diesem Buch trugen direkt oder indirekt zahlreiche Menschen bei. Mein Doktorvater Professor Rothermel lehrte mich, dass es in der Informatikbildung weitaus effizienter ist, grundlegende Konzepte statt oberflächlicher Fakten zu vermitteln. Auch in der schnelllebigen Welt der Informatik bleiben Konzepte über Jahrzehnte bestehen, während sich Fakten und Technologien schnell verändern.
Meine schöne Frau Anna Altimira hat stets ein offenes Ohr, selbst für meine wildesten Ideen, und ich bin ihr zutiefst dankbar dafür! Für Inspiration und Motivation sorgten meine wunderbaren Kinder Amalie und Gabriel. In der Hoffnung, dass sie eines Tages dieses Vorwort lesen werden: Ich liebe euch sehr!
Meine größte Motivationsquelle waren aber stets die aktiven Mitglieder der Finxter-Community. Dieses Buch richtet sich an ambitionierte Programmierer – wie Sie –, die ihre Programmierfähigkeiten verbessern möchten, um sich den Herausforderungen des Informationszeitalters zu stellen. Nach einem langen Arbeitstag waren es häufig die aufbauenden Worte der Finxter-Mitglieder, die mich ermutigten, einen weiteren Abschnitt des Buchs zu schreiben.
Ein besonderer Dank geht an den dpunkt.verlag für das Erstellen dieser deutschsprachigen Ausgabe von Python One-Liners. Insbesondere möchte ich meine Dankbarkeit gegenüber Gabriel Neumann und Kathrin Lichtenberg aussprechen für ihre gewissenhafte und unermüdliche Arbeit an der deutschsprachigen Ausgabe. Eine großartige Übersetzung anzufertigen, ist eine Meisterleistung, und ich bin dankbar, dass die fähigen Lektoren und Übersetzer des dpunkt.verlags sich dieser Aufgabe annahmen.
Das Buch verwendet an verschiedenen Stellen die maskuline, an anderen die feminine Form. Diese Lösung habe ich der leichteren Lesbarkeit halber gewählt. Sie impliziert keine Benachteiligung anderer Geschlechter, sondern ist im Sinne der sprachlichen Vereinfachung als geschlechtsneutral zu verstehen.
In Deutschland habe ich Informatik studiert und promoviert. Es ist mir daher ein besonderes Vergnügen, das Vorwort für diese deutsche Ausgabe zu schreiben.
Der Trend zu Digitalisierung und Programmierung ist ungebrochen in Deutschland. Auf jeden Informatikabsolventen kommen zahlreiche offene Stellen im produzierenden Gewerbe, in der Automobilindustrie, im E-Commerce sowie im öffentlichen Dienst. Programmierfähigkeiten sind gefragt – und mit dem Aufkommen von selbstfahrenden Autos, leistungsfähigen Industrierobotern und der raschen Ausbreitung neuer Technologien im maschinellen Lernen gibt es kaum noch einen Wirtschaftssektor, der von der Digitalisierung unberührt bleibt. Auch neuere Entwicklungen wie die zunehmende Bedeutung von Arbeit im Homeoffice verstärken die Nachfrage nach Informatikern und Programmierern, die mithilfe ihrer Programmierfähigkeiten die Grundlage dafür schaffen. Auch in den kommenden Jahrzehnten können Sie sich darauf verlassen, dass die Nachfrage nach Python-Entwicklern weiter steigen wird, insbesondere im deutschsprachigen Raum.
Meine Python Community1 zur Informatikbildung, Finxter, erfreute sich in den letzten Jahren großen Zulaufs. Je mehr Menschen ich durch Python begegnete, desto mehr kristallisierte sich für mich heraus, dass Python nicht nur eine reine Programmiersprache zur Bedienung von Maschinen ist – Deutsch ist ja auch nicht nur eine Sprache zur Bedienung von Menschen! Wie eine sogenannte natürliche Sprache verbindet Python Millionen von Menschen unterschiedlicher Herkunft. Wie eine natürliche Sprache erleben Millionen Menschen, wie Python ihrer schöpferischen Kraft Ausdruck verleiht.
Ich bin überzeugt, dass jeder moderne Mensch davon profitiert, Python zu lernen. Python ist die Sprache der Algorithmen. Und diese durchdringen mehr und mehr Bereiche des täglichen Lebens. Algorithmen finden kürzeste Wege zur Arbeit, lenken selbstfahrende Autos und helfen bei der effizienten Verteilung von Gütern in weltweiten Mobilitätsnetzen. Python ermöglicht der Menschheit eine effizientere und skalierbarere Organisation von Arbeit. Mithilfe von Computern und Automatisierung sind wir nun in der Lage, eine Gesellschaft zu entwerfen, in der jeder Menschen die Freiheit besitzt, sich seinen Alltag weitestgehend nach seinen eigenen Vorstellungen zu gestalten.
Das Verständnis von Python wird auch Ihrer Karriere nützen. Einige meiner Freunde, Kommilitonen und Kollegen in der Informatikforschung schulden ihren internationalen Erfolg zu einem nicht unwesentlichen Teil ihrer Fähigkeit, Python zu sprechen. Viele der größten Unternehmen und Organisationen unserer Zeit sind mehr denn je an »deutscher Ingenieurskunst« und aufstrebenden Programmierern interessiert, die der Sprache Python mächtig sind.
Bevor Sie mit dem Sprechen ganzer Sätze beginnen, müssen Sie zunächst einzelne Wörter verstehen. Und bevor Sie mit dem Erzählen ganzer Geschichten beginnen, müssen Sie zunächst ganze Sätze bilden können. Das trifft auch auf Programmiersprachen zu! Jedes noch so komplizierte Python-Projekt besteht aus einer Reihe von – oftmals Tausenden – Python One-Liners. Dieses Buch wird Ihnen ein fundiertes Verständnis der einzelnen Zeile von Python-Code vermitteln, sodass Sie nach dessen Lektüre die Python-Vokabeln beherrschen.
Mit diesem Buch möchte ich technikbegeisterten Menschen helfen, die Sprache der Algorithmen zu sprechen, Computer zu beherrschen und deren Kraft gegen die großen Probleme unserer Zeit zu richten.
Mit diesem Buch möchte ich Ihnen helfen, zum Python-Experten zu werden. Wir konzentrieren uns dabei auf Python-Einzeiler: knappe Programme, gepackt in eine einzige Zeile Python. Durch die Einzeiler lernen Sie, Code schneller und präziser zu lesen und zu schreiben und Ihr Verständnis der Sprache zu verbessern.
Es gibt außerdem noch fünf weitere Gründe, weshalb ich glaube, dass Python-Einzeiler Ihnen helfen, sich zu verbessern, und deshalb lohnenswerte Studienobjekte sind.
Erstens, durch das Verbessern Ihrer Python-Kernfähigkeiten werden Sie in die Lage versetzt, viele der kleinen Programmierschwächen zu überwinden, die Sie bremsen. Es ist nicht leicht, Fortschritte zu erzielen, wenn man die Grundlagen nicht richtig verstanden hat. Einzelne Codezeilen sind die Grundbausteine jedes Programms. Wenn Sie diese Grundbausteine verstehen, können Sie auch komplexere Probleme meistern, ohne dass Sie diese überfordern.
Zweitens lernen Sie, die unglaublich beliebten Python-Bibliotheken auszunutzen, wie diejenigen für Data Science und Machine Learning. Das Buch besteht aus fünf Einzeiler-Kapiteln, die jeweils einem eigenen Bereich von Python gewidmet sind, von regulären Ausdrücken bis zum Machine Learning. Durch diese Vorgehensweise erhalten Sie einen Überblick über mögliche Python-Anwendungen und lernen darüber hinaus, diese machtvollen Bibliotheken einzusetzen.
Drittens lernen Sie, Code auf Python-spezifischere Weise zu schreiben. Python-Anfänger, speziell solche, die vorher mit anderen Programmiersprachen gearbeitet haben, schreiben Code oft auf sehr Python-untypische Weise. Wir behandeln Python-spezifische Konzepte wie List Comprehensions, Mehrfachzuweisungen und Slicing, mit deren Hilfe Sie Code schreiben können, der gut lesbar ist und sich dafür eignet, ihn mit anderen Programmierern zu teilen.
Viertens zwingt die Beschäftigung mit Python-Einzeilern Sie dazu, klar und präzise zu denken. Wenn jedes einzelne Codesymbol zählt, bleibt kein Platz für zerstreutes und unkonzentriertes Programmieren.
Fünftes erlauben es Ihnen Ihre neuen Fähigkeiten, übermäßig komplizierte Python-Codeprojekte zu durchschauen und Freunde wie Arbeitgeber gleichermaßen zu beeindrucken. Außerdem dürfte es Ihnen Spaß machen, anspruchsvolle Programmierprobleme mit nur einer einzigen Zeile Code zu lösen. Und Sie wären damit nicht allein: Eine aktive Online-Community aus Python-Geeks wetteifert um die kompaktesten, Python-typischsten Lösungen für verschiedene praktische (und nicht so praktische) Probleme.
Die zentrale These dieses Buchs ist, dass das Lernen von Python-Einzeilern entscheidend für das Verständnis anspruchsvollerer Codeprojekte sowie ein ausgezeichnetes Werkzeug für die Verbesserung Ihrer Fähigkeiten ist. Bevor Sie verstehen, was in einer Codebasis mit Tausenden von Zeilen passiert, müssen Sie die Bedeutung einer einzelnen Codezeile verstehen.
Schauen wir uns einen Python-Einzeiler an. Es macht nichts, wenn Sie nicht alles verstehen. Sie werden diesen Einzeiler in Kapitel 6 meistern.
Dieser Einzeiler ist eine wunderbare und präzise Möglichkeit, den berühmten Quicksort-Algorithmus kurz und knapp zusammenzufassen, auch wenn seine Bedeutung für viele Anfänger und selbst für fortgeschrittene Anfänger schwierig zu durchschauen sein dürfte.
Python-Einzeiler bauen oft aufeinander auf, sodass die Einzeiler im Laufe des Buchs immer komplexer werden. Wir beginnen hier mit einfachen Einzeilern, die dann später die Grundlage für komplexere Einzeiler bilden werden. So ist zum Beispiel der gezeigte Quicksort-Einzeiler schwierig und lang, basiert aber auf dem einfacheren Konzept der List Comprehension . Schauen Sie sich die folgende einfachere List Comprehension an, die eine Liste aus Quadratzahlen erzeugt:
Wir können diesen Einzeiler in noch einfachere Einzeiler zerlegen, die uns wichtige Python-Grundlagen lehren, wie Variablenzuweisungen, mathematische Operatoren, Datenstrukturen, for-Schleifen, Zugehörigkeitsoperatoren und die range()-Funktion – und all dies in einer einzigen Zeile Python!
Seien Sie sich bewusst, dass grundlegend nicht gleichbedeutend ist mit trivial. Alle Einzeiler, die wir uns anschauen, sind sinnvoll und nützlich, und jedes Kapitel befasst sich mit einem eigenen Bereich oder einer Disziplin der Informatik, sodass Sie am Ende einen umfassenden Eindruck von der Stärke gewonnen haben werden, die Python Ihnen bietet.
The Zen of Python fasst 19 Leitsätze für die Programmiersprache Python zusammen. Sie können sie in Ihrer Python-Shell lesen, indem Sie import this eingeben:
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
-- schnipp --
Laut The Zen of Python ist Lesbarkeit wichtig – »Readability counts«. Einzeiler sind minimalistische Programme zum Lösen von Problemen. In vielen Fällen wird durch das Umformulieren eines Stücks Code in einen Python-Einzeiler die Lesbarkeit verbessert, und der Code wird Python-artiger. Ein Beispiel ist die Verwendung von List Comprehension, um das Erzeugen von Listen auf eine einzelne Codezeile zu reduzieren. Schauen Sie sich das folgende Beispiel an:
In diesem Codeausschnitt brauchen wir fünf Zeilen Code, um eine Liste der ersten zehn Quadratzahlen zu erzeugen und auf der Shell auszugeben. Da ist es doch viel besser, wenn man eine Einzeilerlösung benutzt, die dasselbe in einer besser lesbaren und präzisen Weise erreicht:
# NACHHER
print([i**2 for i in range(10)])
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Das Ergebnis ist identisch, doch der Einzeiler setzt auf das Python-spezifische Konzept der List Comprehension. Er ist leichter lesbar und prägnanter.
Es kann aber auch schwierig sein, Python-Einzeiler zu verstehen. In manchen Fällen ist eine Python-Einzeilerlösung nicht lesbarer. Doch genau wie ein Schachmeister, der alle möglichen Züge kennen muss, bevor er sich für einen entscheiden kann, der ihm als der beste erscheint, müssen Sie alle Möglichkeiten kennen, Ihre Gedanken in Code auszudrücken, um zu entscheiden, welche die beste ist. Nach der schönsten Lösung zu streben, ist gar nicht so unwichtig; schließlich findet sich dieses Prinzip im Herzen des Python-Ökosystems. Wie uns The Zen of Python lehrt, ist schön besser als hässlich: »Beautiful is better than ugly«.
Sind Sie Anfänger oder fortgeschrittener Anfänger? Wie viele Ihrer Kollegen stecken auch Sie möglicherweise im Programmierprozess. Dieses Buch kann Ihnen aus dieser Lage heraushelfen. Sie haben online viele Programmieranleitungen gelesen. Sie haben Ihren eigenen Quellcode geschrieben und erfolgreich kleine Projekte ausgeliefert. Sie haben einen Programmiergrundkurs abgeschlossen und ein oder zwei Fachbücher zur Programmierung gelesen. Vielleicht haben Sie sogar einen Kurs an der Uni absolviert, bei dem Sie die Grundlagen von Informatik und Programmierung kennengelernt haben.
Vielleicht werden Sie durch bestimmte Überzeugungen beschränkt, etwa, dass die meisten Programmierer Quellcode viel schneller verstehen als Sie oder dass Sie auf keinen Fall zu den zehn Prozent besten Programmierern gehören. Falls Sie lernen wollen, besser zu programmieren und zur Spitze vorzudringen, müssen Sie neue, nützliche Fähigkeiten erwerben.
Ich kann Ihre Probleme nachvollziehen. Als ich vor zehn Jahren begann, Informatik zu studieren, war ich überzeugt, dass ich nichts über das Programmieren wusste. Gleichzeitig schien mir, als seien alle meine Kommilitonen bereits sehr erfahren und kompetent.
Ich möchte Ihnen mit diesem Buch helfen, diese einschränkenden Überzeugungen zu überwinden und einen entscheidenden Schritt zum Meistern von Python zu machen.
Es folgt ein Überblick über das, was Sie lernen werden.
Kapitel 1: Python-Auffrischungskurs
Führt Sie in die Grundlagen von Python ein, um Ihr Wissen aufzufrischen.
Kapitel 2: Python-Tricks
Enthält zehn Einzeilertricks, mit denen Sie die Grundlagen meistern können, wie etwa List Comprehensions, Dateieingabe, die Funktionen
lambda
,
map()
und
zip()
, den Quantor
all()
, Slicing und einfache Listenberechnungen. Sie lernen außerdem, wie Sie Datenstrukturen benutzen und manipulieren, um verschiedene Standardprobleme zu lösen.
Kapitel 3: Data Science
Enthält zehn Einzeiler für das Data Science, die auf der NumPy-Bibliothek aufbauen. NumPy bildet den Kern der leistungsstarken Machine-Learning- und Data-Science-Fähigkeiten von Python. Sie eignen sich elementare NumPy-Grundlagen wie Array, Shape, Typ, Broadcasting, fortgeschrittene Indexierung, Slicing, Sortieren, Suchen, Sammeln und Statistiken an.
Kapitel 4: Machine Learning
Behandelt zehn Einzeiler für das Machine Learning mit Pythons scikit-learn-Bibliothek. Sie lernen Regressionsalgorithmen kennen, die Werte vorhersagen. Dazu gehören lineare Regression, k-Nearest Neighbors und neuronale Netzwerke. Außerdem lernen Sie Klassifikationsalgorithmen kennen wie logistische Regression, Decision-Tree Learning, Support-Vector Machines und Random Forests. Darüber hinaus erfahren Sie, wie Sie einfache Statistiken mehrdimensionaler Datenfelder sowie den k-Means-Algorithmus für Unsupervised Learning berechnen. Diese Algorithmen und Methoden gehören zu den wichtigsten auf dem Gebiet des Machine Learning.
Kapitel 5: Reguläre Ausdrücke
Enthält zehn Einzeiler, mit denen Sie mehr aus regulären Ausdrücken herausholen. Sie lernen verschiedene einfache reguläre Ausdrücke kennen, die Sie kombinieren (und neu kombinieren) können, um komplexere reguläre Ausdrücke zu erzeugen, und verwenden Gruppierung und benannte Gruppen, negative Lookaheads, Escape-Zeichen, Whitespaces, Zeichenmengen (und negative Zeichenmengen) sowie gierige/nicht gierige Operatoren.
Kapitel 6: Algorithmen
Enthält zehn Einzeiler-Algorithmen zu einem breiten Spektrum an Informatikthemen, darunter Anagramme, Palindrome, Potenzmengen, Permutationen, Fakultäten, Primzahlen, Fibonacci-Zahlen, Verschleiern, Suche und algorithmisches Sortieren. Vieles davon dient als Grundlage für komplexere Algorithmen und enthält den Keim für eine gründliche algorithmische Ausbildung.
Nachwort
Beschließt das Buch und entlässt Sie in die wirkliche Welt, in der Sie Ihre neuen und verbesserten Python-Programmierkenntnisse anwenden können.
Zur Ergänzung des Übungsmaterials in diesem Buch habe ich weitere Ressourcen bereitgestellt, die Sie online unter https://pythononeliners.com/ oder http://www.nostarch.com/pythononeliners/ finden. Zu den interaktiven Ressourcen gehören:
Python-Cheat-Sheets
Sie können diese Python-Schummelseiten als PDFs herunterladen, ausdrucken und sich an die Wand heften. Diese Seiten enthalten wichtige Python-Sprachfunktionen und helfen Ihnen dabei, Ihre Python-Kenntnisse aufzufrischen und Wissenslücken zu schließen.
Einzeiler-Video-Lektionen
Als Teil meines Python-E-Mail-Kurses habe ich viele Python-Einzeiler-Lektionen aus diesem Buch aufgezeichnet, die Sie kostenlos abrufen können. Diese Lektionen sollen Ihnen beim Lernen helfen und bieten ein multimediales Lernerlebnis.
Python-Rätsel
Sie können die Online-Ressourcen besuchen, um Python-Rätsel zu lösen, und mit der kostenlosen
Finxter.com
-App Ihre Python-Fertigkeiten testen und trainieren sowie Ihren Lernfortschritt beim Durcharbeiten des Buchs messen.
Code-Dateien und Jupyter-Notebooks
Sie müssen die Ärmel hochkrempeln und tatsächlich mit Code arbeiten, um zur Python-Expertin zu werden. Spielen Sie mit den verschiedenen Parameterwerten und Eingabedaten herum. Zu Ihrer Bequemlichkeit habe ich alle Python-Einzeiler als ausführbare Codedateien hinzugefügt.
Zweck dieses Kapitels ist es, Ihre Kenntnisse der grundlegenden Python-Datenstrukturen, -Schlüsselwörter, Kontrollflussoperationen usw. aufzufrischen. Ich habe dieses Buch für Python-Programmierer geschrieben, die bereits gewisse Fähigkeiten besitzen. Um zum Experten zu werden, müssen Sie natürlich die Grundlagen beherrschen.
Das Verständnis der Grundlagen erlaubt es Ihnen, einen Schritt zurückzutreten und das breitere Bild zu betrachten – eine wichtige Fähigkeit, ob Sie nun den Aufstieg bei Google schaffen, Informatikprofessorin werden oder einfach nur gut programmieren können wollen. Informatikprofessoren besitzen z. B. oft ein unglaublich tiefgreifendes Wissen der Grundlagen in ihrem Gebiet, das es ihnen ermöglicht, über Grundprinzipien zu diskutieren und Forschungslücken zu erkennen, statt sich von der allerneuesten Technologie blenden zu lassen. Dieses Kapitel präsentiert die wichtigsten Python-Grundlagen, die als Fundament für die höheren Themen in diesem Buch dienen.
Ein gründliches Verständnis der Datenstrukturen ist eine der grundlegendsten Fähigkeiten, die Sie als Programmierer erwerben können. Diese Grundlagen werden Ihnen immer hilfreich sein, ob Sinee nun Machine-Learning-Projekte schaffen, an großen Codeprojekte arbeiten, Websites einrichten und verwalten oder Algorithmen schreiben.
Die wichtigsten numerischen Datentypen sind Integer und Float. Ein Integer ist eine positive oder negative Zahl ohne Gleitkomma (z. B. 3). Ein Float ist eine positive oder negative Zahl mit Gleitkommagenauigkeit (z. B. 3,14159265359). Python bietet eine große Vielzahl an eingebauten numerischen Operationen sowie die Funktionalität, um diese numerischen Datentypen ineinander umzuwandeln. Schauen Sie sich die Beispiele in Listing 1–1 genau an, um diese ungemein wichtigen numerischen Operationen zu meistern.
Eine Variable vom Typ Boolean kann nur zwei Werte annehmen – False oder True.
In Python sind die Datentypen Boolean und Integer eng miteinander verwandt: Der Datentyp Boolean benutzt intern Integer-Werte (der boolesche Wert False wird durch den Integer-Wert 0 repräsentiert, der boolesche Wert True durch den Integer-Wert 1). Listing 1–2 zeigt ein Beispiel für diese beiden booleschen Schlüsselwörter.
Nach dem Auswerten der angegebenen Ausdrücke verweist die Variable x auf den booleschen Wert False, die Variable y dagegen auf den booleschen Wert True.
Sie können die booleschen Werte mit drei wichtigen Schlüsselwörtern verwenden, um in Python kompliziertere Ausdrücke zu erzeugen.
boolesche Ausdrücke stellen grundlegende logische Operatoren dar. Allein in Kombination mit den folgenden drei Schlüsselwörtern können Sie ein breites Spektrum an potenziell komplizierten Ausdrücken erzeugen:
andDer Ausdruck x and y wird zu True ausgewertet, falls der Wert x Trueist und der Werty ebenfalls True ist. Ist einer der Werte False, wird der Gesamtausdruck ebenfalls False.
orDer Ausdruck x or y wird zu True ausgewertet, falls der Wert x True ist oder der Werty True ist (oder beide Werte True sind). Falls nur einer der Werte True ist, wird auch der Gesamtausdruck True.
notDer Ausdruck not x wird zu True ausgewertet, falls x False ist. Ansonsten wird der Ausdruck zu False ausgewertet.
Schauen Sie sich den folgenden Python-Code in Listing 1–3 an.
Mithilfe dieser drei Schlüsselwörter können Sie alle logischen Ausdrücke formulieren, die Sie jemals brauchen werden.
Um die boolesche Logik wirklich zu verstehen, muss man die Reihenfolge beachten, in der die booleschen Operatoren angewandt werden. Nehmen Sie z. B. die natürlichsprachige Aussage »es regnet und es ist kalt oder windig«. Wir können sie auf zweierlei Weise interpretieren:
»(es regnet und es ist kalt) oder windig«In diesem Fall wäre die Aussage True, falls es windig ist – selbst wenn es nicht regnet.
und »es regnet und (es ist kalt oder windig)«In diesem Fall dagegen wäre die Aussage False, falls es nicht regnet – selbst wenn es kalt oder windig ist.
Die Reihenfolge der booleschen Operatoren ist wichtig. Die erste Interpretation dieser Aussage wäre korrekt, weil der and-Operator Vorrang vor dem or-Operator hat. Schauen wir uns den Codeausschnitt in Listing 1–4 an.
Dieser Code zeigt zwei wichtige Punkte. Erstens werden boolesche Operatoren nach Priorität geordnet – der Operator not hat die höchste Priorität, gefolgt vom Operator and, gefolgt vom Operator or. Zweitens werden die folgenden Werte automatisch zu False ausgewertet: das Schlüsselwort None, der Integer-Wert 0, der Float-Wert 0.0, leere Strings oder leere Containertypen.
Python-Strings sind Zeichenfolgen. Strings sind unveränderlich, können also nach der Erschaffung nicht verändert werden. Es gibt zwar noch andere Methoden, um Strings herzustellen, doch dies sind die fünf gebräuchlichsten:
Einfache Anführungszeichen'Ja'
Doppelte Anführungszeichen"Ja"
Dreifache Anführungszeichen für mehrzeilige Strings'''Ja''' oder """Ja"""
Verkettung'Py' + 'thon' wird 'Python'
Oft verwenden Sie explizit Whitespace-Zeichen (Leerraum) in Strings. Die am häufigsten eingesetzten Whitespace-Zeichen sind das Newline-Zeichen \n, das Leerzeichen \s und das Tabulator-Zeichen \t.
Listing 1–5 zeigt die wichtigsten String-Methoden.
Diese nicht vollständige Liste der String-Methoden zeigt, wie viel Macht der Datentyp string besitzt und dass Sie viele der gebräuchlichen String-Probleme mit der in Python enthaltenen Funktionalität lösen können. Falls Sie unsicher sind, wie Sie ein bestimmtes Ergebnis bei String-Problemen erreichen, schauen Sie in die Onlinereferenz mit allen eingebauten String-Methoden: https://docs.python.org/3/library/string.html#module-string.
Boolesche Werte, Integer, Floats und Strings sind die wichtigsten grundlegenden Datentypen in Python. Oft jedoch müssen Sie Datenelemente nicht nur erzeugen, sondern auch strukturieren. In diesen Fällen helfen Ihnen Containertypen. Doch bevor wir uns diese anschauen, wollen wir noch einen wichtigen Spezialdatentyp kennenlernen: None.
Das Schlüsselwort None ist eine Python-Konstante und bedeutet die Abwesenheit eines Werts. Andere Programmiersprachen wie etwa Java nutzen stattdessen den Wert null. Allerdings verwirrt der Begriff null Anfänger oft, die glauben, dies sei gleich dem Integer-Wert 0. Python nutzt also das Schlüsselwort None, wie Listing 1–6 zeigt, um anzudeuten, dass es sich von jedem anderen numerischen Wert für null, einer leeren Liste oder einem leeren String unterscheidet. Interessanterweise ist der Wert None der einzige Wert im Datentyp NoneType.
Dieser Code zeigt mehrere Beispiele für den Datenwert None (und was er nicht ist). Falls Sie für eine Funktion keinen Rückgabewert definieren, wird standardmäßig None zurückgeliefert.
Python enthält Container-Datentypen, die effizient mit komplexen Operationen zurechtkommen und dabei leicht verwendbar sind.
Die Liste ist ein Container-Datentyp, der eine Abfolge von Elementen speichert. Im Gegensatz zu Strings sind Listen veränderbar – Sie können sie zur Laufzeit modifizieren. Am besten beschreibe ich die Liste an einigen Beispielen:
Dieser Codeausschnitt zeigt, wie eine Liste mittels eckiger Klammern erzeugt und dann mit drei Integer-Elementen gefüllt wird. Elemente in Listen dürfen sich übrigens wiederholen. Die Funktion len() gibt die Anzahl der Elemente in einer Liste zurück.
Das Schlüsselwort is prüft einfach, ob beide Variablen auf dasselbe Objekt im Speicher verweisen. Das kann für Python-Anfänger verwirrend sein. Listing 1–7 prüft, ob zwei Integer und zwei Listen sich auf dasselbe Objekt im Speicher beziehen.
Wenn Sie zwei Listen anlegen, beziehen diese sich – auch wenn sie dieselben Elemente enthalten – auf zwei unterschiedliche Listenobjekte im Speicher. Das Verändern des einen Listenobjekts hat keinen Einfluss auf das andere Listenobjekt. Wir bezeichnen Listen als veränderbar, weil sie nach dem Erzeugen modifiziert werden können. Wenn Sie also prüfen, ob eine Liste sich im Speicher auf dasselbe Objekt bezieht, ist das Ergebnis False. Integer-Werte dagegen sind unveränderbar, weshalb nicht das Risiko besteht, dass eine Variable das Objekt verändert, das dann versehentlich alle anderen Variablen ändert. Der Grund besteht darin, dass Sie das Integer-Objekt 3 nicht ändern können – wenn Sie es versuchen, wird lediglich ein neues Integer-Objekt angelegt, und das alte bleibt unverändert.
Python bietet drei einfache Möglichkeiten, um Elemente zu einer vorhandenen Liste hinzuzufügen: Anhängen, Einfügen oder Listenverkettung.
Alle drei Operationen generieren die Liste [1, 2, 2, 4]. Dabei ist die append-Operation am schnellsten, weil sie weder die Liste durchlaufen muss, um ein Element an der korrekten Position einzufügen (wie bei insert), noch aus zwei Teillisten eine neue Liste erzeugen muss (wie bei der Listenverkettung). Grob gesagt, benutzen Sie die insert-Operation nur, wenn Sie ein Element an einer bestimmten Position in der Liste hinzufügen wollen, die nicht die letzte Position ist. Die Listenverkettung wiederum verwenden Sie, um zwei Listen beliebiger Länge miteinander zu verketten. Beachten Sie, dass eine vierte Methode, extend(), es Ihnen erlaubt, effizient mehrere Elemente an eine bestimmte Liste anzuhängen.
Mit der list-Methode remove(x): können Sie ganz leicht ein Element x aus einer Liste entfernen:
Die Methode arbeitet auf dem Listenobjekt selbst, statt eine neue, geänderte Liste zu erzeugen. Im vorherigen Codebeispiel erzeugen wir ein Listenobjekt namens l und modifizieren genau dieses Objekt im Speicher, indem wir ein Element entfernen. Dies verhindert eine unnötige Belegung von Speicher, da es keine redundanten Kopien der gleichen Listendaten gibt.
Sie können die Reihenfolge der Listenelemente mit der Methode list.reverse() umkehren:
Durch das Umkehren der Liste wird das ursprüngliche Listenobjekt modifiziert und nicht lediglich ein neues Listenobjekt angelegt.
Mit der Methode list.sort() können Sie die Listenelemente sortieren:
Auch hier wird durch das Sortieren der Liste das originale Listenobjekt verändert. Die resultierende Liste ist aufsteigend sortiert. Listen mit String-Objekten werden in aufsteigender lexikografischer Weise sortiert (von 'a' bis 'z'). Im Allgemeinen geht die Sortierfunktion davon aus, dass zwei Objekte miteinander verglichen werden können. Grob gesagt gilt, wenn Sie a > b für die Objekte a und b eines beliebigen Datentyps berechnen können, kann Python auch die Liste [a, b] sortieren.
Den Index eines bestimmten Listenelements x können Sie mit der Methode list.index(x) ermitteln:
print([2, 2, 4].index(2))
# 0
print([2, 2, 4].index(2,1))
# 1
Die Methode index(x) sucht das erste Auftreten des Elements x in der Liste und gibt dessen Index zurück. Wie alle großen Programmiersprachen weist Python der ersten Sequenz den Index 0 und der i. Sequenz den Index i−1 zu.
Die Datenstruktur stack arbeitet intuitiv als First-in-First-out-(FIFO-)Struktur. Stellen Sie sich das wie einen Papierstapel vor: Jedes neue Blatt legen Sie oben auf den Stapel alter Papiere, und wenn Sie den Stapel durcharbeiten, dann entfernen Sie jeweils das oberste Dokument. Stacks sind in der Informatik eine grundlegende Datenstruktur, die in der Verwaltung von Betriebssystemen, in Algorithmen, beim Syntax-Parsing und beim Backtracking zum Einsatz kommt.
Python-Listen können intuitiv als Stacks eingesetzt werden, wobei die Listenoperation append() etwas zum Stack hinzufügt und pop() das zuletzt hinzugefügte Element entfernt:
Aufgrund der Effizienz der Listenimplementierung ist es meist nicht nötig, externe Stack-Bibliotheken zu importieren.
Die Datenstruktur set ist ein Sammeldatentyp in Python und vielen anderen Programmiersprachen. Beliebte Sprachen für verteilte Systeme (z. B. MapReduce oder Apache Spark) setzen sogar fast ausschließlich auf Mengenoperationen als Grundfunktionen für die Programmierung. Was genau ist eine Menge also? Eine Menge ist eine ungeordnete Sammlung eindeutiger Elemente. Zerlegen wir diese Definition in ihre Bestandteile.
Eine Menge ist eine Sammlung von Elementen wie eine Liste oder ein Tupel. Die Sammlung besteht entweder aus primitiven (Integer, Floats, Strings) oder aus komplexen Elementen (Objekte, Tupel). Allerdings müssen alle Datentypen Hash-fähig sein, was bedeutet, dass ihnen ein Hash-Wert zugeordnet ist. Der Hash-Wert eines Objekts ändert sich nie und wird dazu verwendet, um das Objekt mit anderen Objekten zu vergleichen. Schauen wir uns das Beispiel in Listing 1–8 an, das eine Menge aus drei Strings erzeugt, nachdem deren Hash-Werte geprüft wurden. Sie versuchen, eine Menge aus Listen herzustellen, was nicht funktioniert, da Listen nicht Hash-fähig sind.
Sie können eine Menge aus Strings erzeugen, weil Strings Hash-fähig sind. Eine Menge aus Listen dagegen ist nicht möglich, da Listen nicht Hash-fähig sind. Das liegt daran, dass der Hash-Wert vom Inhalt des Elements abhängt und Listen veränderlich sind; wenn Sie den Listen-Datentyp ändern, muss sich auch der Hash-Wert ändern. Da veränderliche Datentypen nicht Hash-fähig sind, können Sie sie nicht in Mengen verwenden.