{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Software Entwicklung \n", "\n", "## Kapitel 3: Listen und Tupel\n", "\n", "### 3.7 List Comprehensions\n", "\n", "Mit Hilfe von *List Comprehensions* können Listen basierend auf bestehenden Listen oder Sequenzen erzeugt werden. \n", "Dazu wird die bestehende Sequenz mit einer for-Schleife durchlaufen und die einzelnen Elemente zu einer\n", "neuen Liste zusammengefasst. Die Syntax dazu sieht so aus:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "alte_liste = [1, 2, 3]\n", "neue_liste = [x for x in alte_liste]\n", "print(neue_liste)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Natürlich sind auch Funktionsaufrufe möglich." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "alte_liste = ['Hello', 'World!']\n", "neue_liste = [len(word) for word in alte_liste]\n", "print(neue_liste)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Durch das Ergänzen eines if können Elemente der ursprünglichen Liste bzw. Sequenz \n", "ausgelassen werden." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "neue_liste = [x for x in range(20) if x%2 == 0 ]\n", "print(neue_liste)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 3.8 Listen und Strings\n", "\n", "Gelegentlich möchte man einen String in einzelne Wörter zerlegen und diese als\n", "Liste zurückgeliefert bekommen. Hierzu dient die Operation split, die \n", "in Dot-Notation im Datentyp String enthalten ist." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "text =\"Software Entwicklung macht Spaß\"\n", "liste = text.split()\n", "print(liste)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Normalerweise verwendet split ein *Whitespace*-Zeichen (d.h. Leerzeichen, Tabulator, neue Zeile,...)\n", "als Trennzeichen für die Zerlegung. Es kann jedoch auch eine andere Zeichenkette festgelegt werden. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "text = \"der, die, das, wieso, weshalb, warum\"\n", "liste = text.split(\", \")\n", "print(liste)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hinweis: Mehrere unterschiedliche Trennzeichen sind mit der Standard-split-Funktion nicht realisierbar. \n", "Dazu benötigt man *reguläre Ausdrücke*, die zu einem späteren Zeitpunkt eingeführt werden." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Soll umgekehrt aus einer Liste von einzelnen Wörtern ein String zusammengesetzt werden, kann die \n", "Funktion join genutzt werden. Sie wird in der Dot-Notation mit einem String verwendet,\n", "der die einzufügenden Trennzeichen enthält." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "liste = [\"das\", \"ist\", \"das\", \"Haus\", \"vom\", \"Nikolaus\"]\n", "text = \"\".join(liste)\n", "print(text)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 3.9 Slicing\n", "\n", "Viele Sequenztypen in Python (bisher bekannt: Listen, Tupel, Strings, Ranges) können mittels *Slicing* \n", "zurechtgeschnitten werden. Dazu werden der Index des ersten zu berücksichtigenden Elements und der\n", "Index des ersten nicht mehr zu berücksichtigenden Elements getrennt durch einen Doppelpunkt angegeben." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "liste = ['A', 'B', 'C', 'D', 'E']\n", "middle = liste[1:4]\n", "print(middle)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "slide" } }, "source": [ "Wird einer der Indexwerte weggelassen, so bedeutet dies, dass der Ausschnitt am Anfang beginnt bzw. bis\n", "zum Ende reicht." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "liste = ['A', 'B', 'C', 'D', 'E']\n", "anfang = liste[:3]\n", "print(anfang)\n", "ende = liste[2:]\n", "print(ende)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Natürlich funktionieren auch negative Indizes." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "liste = ['A', 'B', 'C', 'D', 'E']\n", "middle = liste[1:-1]\n", "print(middle)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Und schließlich kann durch Angabe eines dritten Parameters eine Schrittweite vorgegeben werden. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "sequenz = range(20)\n", "gerade = sequenz[0::2]\n", "print(list(gerade))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Auch negative Schrittweiten sind zulässig. Die Sequenz wird dann von hinten durchlaufen." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "text = \"TH Nürnberg\"\n", "print(text[::-1])\n" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.9" }, "pycharm": { "stem_cell": { "cell_type": "raw", "metadata": { "collapsed": false }, "source": [] } } }, "nbformat": 4, "nbformat_minor": 1 }