Browse Source

Add zip function.

master
paulusja 1 year ago
parent
commit
6d1b6e30a0
1 changed files with 100 additions and 0 deletions
  1. 100
    0
      03kapitel/033 Tupel.ipynb

+ 100
- 0
03kapitel/033 Tupel.ipynb View File

@@ -268,6 +268,106 @@
"for index, zahl in enumerate(liste):\n",
" print(f\"{index+1}. Zahl ist {zahl}\")"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Ein weiterer Anwendungsfall, der häufig auftritt, ist das Zusammenfassen mehrerer Listen zu einer, sodass jedes Element einer Position aus allen Listen in eine Tupel an entsprechender Stelle der neuen Liste gesetzt wird. Es sollen also alle ersten Elemente aller Listen in Form eines Tupels als erstes Element der neuen Liste gesetzt werden, dann alle zweiten Elemente als Tupel als zweites Element der neuen Liste, usw..\n",
"\n",
"**Beispiel:** Die Listen `[0, 1, 2]`, `['A', 'B', 'C']` und `['X', 'Y', 'Z']` sollen in einer neuen Liste folgendermaßen zusammengefasst werden: `[(0, 'A', 'X'), (1, 'B', 'Y'), (2, 'C', 'Z')]`\n",
"\n",
"Dies lässt sich sehr einfach mit der Built-In-Funktion `zip` realisieren, die beliebig viele Listen als Argumente übergeben bekommt und ein Zip-Objekt zurückgibt, das sich in eine Liste umwandeln lässt, die die jeweiligen Elemente als Tupel enthält, so wie oben gewünscht."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"liste1 = [0, 1, 2]\n",
"liste2 = ['A', 'B', 'C']\n",
"liste3 = ['X', 'Y', 'Z']\n",
"\n",
"neue_liste = list(zip(liste1, liste2, liste3))\n",
"\n",
"print(neue_liste)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"`zip` wird am häufigsten genutzt, um mehrere Listen parallel zu durchlaufen."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"liste1 = [0, 1, 2]\n",
"liste2 = ['A', 'B', 'C']\n",
"liste3 = ['X', 'Y', 'Z']\n",
"\n",
"for elem_aus_liste1, elem_aus_liste2, elem_aus_liste3 in zip(liste1, liste2, liste3):\n",
" print(f'Die Listen enthalten folgende Elemente: Liste 1: {elem_aus_liste1}, Liste 2: {elem_aus_liste2}, Liste 3: {elem_aus_liste3}')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Möglich wird dies, weil man in Python die einzelnen Elemente eines Tupels direkt an einzelne Variablen zuweisen kann."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"mein_tupel = (1, 2, 3)\n",
"elem1, elem2, elem3 = mein_tupel\n",
"print(elem1)\n",
"print(elem2)\n",
"print(elem3)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Genauso wird in der obigen `for`-Schleifen mit `zip` pro Position der entsprechende Tupel entnommen und an die Schleifenvariablen der `for`-Schleife aufgeteilt. Die beiden untenstehenden Vorgehensweisen sind also gleich, wenn die zweite auch die schnellere und gebräuchlichere ist."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"liste1 = [0, 1, 2]\n",
"liste2 = ['A', 'B', 'C']\n",
"liste3 = ['X', 'Y', 'Z']\n",
"\n",
"print('1. Vorgehensweise mit explizitem Zwischenspeichern und Auspacken des Tupels:')\n",
"for tupel_elem in zip(liste1, liste2, liste3):\n",
" elem_aus_liste1, elem_aus_liste2, elem_aus_liste3 = tupel_elem\n",
" print(f'Die Listen enthalten folgende Elemente: Liste 1: {elem_aus_liste1}, Liste 2: {elem_aus_liste2}, Liste 3: {elem_aus_liste3}')\n",
"\n",
"\n",
"\n",
"print('\\n2. Vorgehensweise mit direktem Auspacken des Tupels ohne Zwischenspeichern (gebräuchlichere Variante)')\n",
"for elem_aus_liste1, elem_aus_liste2, elem_aus_liste3 in zip(liste1, liste2, liste3):\n",
" print(f'Die Listen enthalten folgende Elemente: Liste 1: {elem_aus_liste1}, Liste 2: {elem_aus_liste2}, Liste 3: {elem_aus_liste3}')"
]
}
],
"metadata": {

Loading…
Cancel
Save