{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Software Entwicklung \n", "\n", "## Kapitel 3: Listen und Tupel" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### 3.6 Tupel\n", "\n", "*Tupel* sind wie Listen ein Datentyp, mit dem *mehrere Werte* verwaltet werden können. Aber anders als Listen\n", "kann ein einmal erzeugtes Tupel nicht verändert werden, d.h.\n", "\n", "* es können keine weiteren Werte hinzugefügt werden\n", "* es können keine Werte aus dem Tupel entfernt werden\n", "* es kann kein Wert innerhalb des Tupels verändert werden\n", "\n", "Aufgrund dieser Einschränkungen werden Tupel i.d.R. schneller verarbeitet als Listen.\n", "\n", "Tupel werden durch runde Klammern begrenzt." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "tupel = (3, 7, 4, 9)\n", "print(len(tupel))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Lesender Zugriff ist wiederum mit einem Index möglich." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "tupel = (3, 7, 4, 9)\n", "print(tupel[2])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Schreibender Zugriff wird aufgrund des Read-Only-Charakters von Tupeln verwehrt. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "tupel = (3, 7, 4, 9)\n", "tupel[2] = 3" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Die Elemente eines Tupels können mit einem einzigen Befehl separaten Variablen zugewiesen werden. Die Anzahl der\n", "aufnehmenden Variablen muss aber exakt der Länge des Tupels entsprechen." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "tupel = (3, 7, 4, 9)\n", "e1, e2, e3, e4 = tupel\n", "print(e4)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Wie die Liste ist auch ein Tupel eine Sequenz, die mit Hilfe der for-Schleife\n", "durchlaufen werden kann." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "for zahl in (3, 7, 4, 9):\n", " print(zahl)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "slide" } }, "source": [ "Listen und Tupel können verschachtelt werden, d.h. eine Liste kann wiederum Listen und/oder Tupel enthalten bzw. \n", "die Elemenente eines Tupels können auch Listen oder Tupel sein." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "tupel = ((3, 7), (4, 9))\n", "print(len(tupel))\n", "print(tupel[1][0])" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "ergebnis = []\n", "for zeilennummer in range(1, 6):\n", " neue_zeile = []\n", " for index in range(zeilennummer):\n", " neue_zeile.append(zeilennummer)\n", " ergebnis.append(neue_zeile)\n", "print(ergebnis)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Gelegentlich möchte man eine Liste \"durchnummerieren\", d.h. neben den eigentlichen Listenelementen\n", "auch den Index des Listenelements ausweisen:\n", "\n", "['A', 'B', 'C'] -> [(0, 'A'), (1, 'B'), (2, 'C')]\n", "\n", "Genau dieses leistet die Built-In-Funktion enumerate, die aus einer Liste eine Sequenz \n", "von derartigen Tupeln generiert. Und wie bei range muss das Ergebnis erst noch in eine Liste\n", "umgewandelt werden, um wirklich das obige Verhalten nachzubilden." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "print(list(enumerate(['A', 'B', 'C'])))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "Ein häufiger Anwendungsfall einer enumerate-Sequenz ist die Verwendung in einer \n", "for-Schleife. Die entstehenden Tupel können unmittelbar in zwei einzelne Variablen \n", "übernommen werden." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "is_executing": false, "name": "#%%\n" } }, "outputs": [], "source": [ "liste = [3, 7, 4, 9]\n", "for index, zahl in enumerate(liste):\n", " print(f\"{index+1}. Zahl ist {zahl}\")" ] } ], "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 }