Python One-Liners - Christian Mayer - E-Book

Python One-Liners E-Book

Christian Mayer

0,0

Beschreibung

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:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 295

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



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

Python One-Liners

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

Inhalt

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

Danksagung

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.

Zur deutschen Ausgabe

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.

Vorwort

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.

Einführung

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.

Ein Beispiel für einen Python-Einzeiler

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.

Ein Hinweis zur Lesbarkeit

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«.

An wen richtet sich dieses Buch?

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.

Was werden Sie lernen?

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.

Online-Ressourcen

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.

1

Python-Auffrischungskurs

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.

Grundlegende Datenstrukturen

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.

Numerische Datentypen und -strukturen

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.

Listing 1–1Die numerischen Datentypen

Boolesche Werte

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.

Listing 1–2Die booleschen Werte False und True

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.

Schlüsselwörter: and, or, not

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.

Listing 1–3Die Schlüsselwörter and, or und not

Mithilfe dieser drei Schlüsselwörter können Sie alle logischen Ausdrücke formulieren, die Sie jemals brauchen werden.

Die Rangordnung der booleschen Operatoren

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.

Listing 1–4Der boolesche Datentyp

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.

Strings

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.

Listing 1–5Der Datentyp string

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

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.

Listing 1–6Die Verwendung des Schlüsselworts None

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.

Container-Datenstrukturen

Python enthält Container-Datentypen, die effizient mit komplexen Operationen zurechtkommen und dabei leicht verwendbar sind.

Listen

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.

Schlüsselwort: is

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.

Listing 1–7Das Schlüsselwort is im Einsatz

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.

Elemente hinzufügen

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.

Elemente entfernen

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.

Listen umkehren

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.

Listen sortieren

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.

Listenelemente indizieren

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.

Stacks

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.

Mengen

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.

Sammlung

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.

Listing 1–8Der Datentyp set ist nur für Hash-fähige Elemente geeignet.

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.

Ungeordnet