Iterace přes několik seznamů současně

Obsah

28. Iterace přes několik seznamů současně#

V Pythonu můžeme provádět iterace přes několik seznamů současně pomocí funkce zip(). Funkce zip() kombinuje prvky více seznamů do jednoho iterovatelného objektu, který obsahuje n-tice obsahující prvky ze všech vstupních seznamů na stejných pozicích. Poté můžeme tento objekt použít v cyklu for k iteraci přes všechny seznamy zároveň.

Syntaxe použití zip() je následující.

for prvek1, prvek2, ... in zip(seznam1, seznam2, ...):
    # Kód, který se provádí pro každý prvek z každého seznamu současně

Počet seznamů, které chceme kombinovat, může být libovolný.

Zde je příklad použití zip() k iteraci přes dva seznamy současně:

seznam1 = [1, 2, 3]
seznam2 = ['a', 'b', 'c']

for cislo, pismeno in zip(seznam1, seznam2):
    print(f"Číslo: {cislo}, Písmeno: {pismeno}")

Tento kód projde oba seznamy seznam1 a seznam2 zároveň a vypíše odpovídající páry prvků.

Ukázka s kreslením tří funkcí do tří různých souřadných soustav uvedená v otázce s funkci enumerate() by se dala pomocí zip() přepsat následovně.

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10)
seznam = [np.sin, np.cos, lambda x:x**2]
fig, ax = plt.subplots(len(seznam),1)

for a,f in zip(ax,seznam):
    a.plot(x,f(x))

28.1. Úkol#

Předpřipravená data o studentech jsou v políčku pro odpověď.

jmena = ["Alice", "Martina", "Jirka", "David"]
obory = ["Krajinářství", "Lesnictví", "Krajinářství", "Nábytek"]

body = {
    "Alice": [90, 88, 94],
    "Martina": [85, 92, 88],
    "Lucie": [88, 60, 55],
    "Jirka": [78, 90, 85],
    "David": [92, 86, 89]
}

Úkolem je vypsat informace o studentech ve formátu, jak je v předepsaných a zapoznámkovaných řádcích s funkcí print. Výsledek tedy bude začínat následovně.

Jméno: Alice
Obor: Krajinářství
Body: [90, 88, 94]

Jméno: Martina
Obor: Lesnictví
....atd

Vyjděte z následujícího kódu.

jmena = ["Alice", "Martina", "Jirka", "David"]
obory = ["Krajinářství", "Lesnictví", "Krajinářství", "Nábytek"]

body = {
    "Alice": [90, 88, 94],
    "Martina": [85, 92, 88],
    "Lucie": [88, 60, 55],
    "Jirka": [78, 90, 85],
    "David": [92, 86, 89]
}
#print(f"Jméno: {jmeno}")
#print(f"Obor: {obor}")
#print(f"Body: {body[jmeno]}")
#print("")