Woche 13#
Matrix transponieren#
Matrix_2mal3 = [ # 2 Zeilen, 3 Spalten, zeilenweise
[ 11, 12, 13 ],
[ 21, 22, 23 ]
]
Matrix_2mal3
[[11, 12, 13], [21, 22, 23]]
l0 = [ 11, 12, 13 ]
l1 = [ 21, 22, 23 ]
Matrix_2mal3 = [ l0, l1 ]
Matrix_2mal3
[[11, 12, 13], [21, 22, 23]]
Matrix_2mal3[0], Matrix_2mal3[1]
([11, 12, 13], [21, 22, 23])
dict( zip(l0, l1) )
{11: 21, 12: 22, 13: 23}
berlin = list( zip(l0, l1) )
berlin
[(11, 21), (12, 22), (13, 23)]
s0 = berlin[0]
s1 = berlin[1]
s2 = berlin[2]
s0, s1, s2
((11, 21), (12, 22), (13, 23))
list( zip(s0, s1, s2) )
[(11, 12, 13), (21, 22, 23)]
Aufgabe#
gegeben: zwei Listen:
l0 = [ "a", "b", "c" ]
l1 = [ 1, 2, 3 ]
Simulieren Sie zip()!
for x in l0:
print(x)
a
b
c
for i in range(len(l0)):
print( f"{i=}, {l0[i]=}, {l1[i]=}")
i=0, l0[i]='a', l1[i]=1
i=1, l0[i]='b', l1[i]=2
i=2, l0[i]='c', l1[i]=3
ergebnis = []
for i in range(len(l0)):
print( f"{i=}, {l0[i]=}, {l1[i]=}")
ergebnis.append( (l0[i], l1[i]) )
ergebnis
i=0, l0[i]='a', l1[i]=1
i=1, l0[i]='b', l1[i]=2
i=2, l0[i]='c', l1[i]=3
[('a', 1), ('b', 2), ('c', 3)]
ergebnis = [ (l0[i], l1[i]) for i in range(len(l0)) ]
ergebnis
[('a', 1), ('b', 2), ('c', 3)]
CSV + glob()#
import glob
location = "../breitbandmessung_LA_2026-01-13/"
#help( glob.glob )
messdateien_name = glob.glob("../breitbandmessung_LA_2026-01-13/*")
messdateien_name
['../breitbandmessung_LA_2026-01-13/Breitbandmessung_13_01_2026_09_44_31.csv',
'../breitbandmessung_LA_2026-01-13/Breitbandmessung_13_01_2026_09_48_21.csv',
'../breitbandmessung_LA_2026-01-13/Breitbandmessung_13_01_2026_09_47_06.csv']
datei = {}
for dateiname in messdateien_name:
with open(dateiname) as f:
datei[dateiname] = f.read()
datei
{'../breitbandmessung_LA_2026-01-13/Breitbandmessung_13_01_2026_09_44_31.csv': '"Messzeitpunkt";"Download (Mbit/s)";"Upload (Mbit/s)";"Laufzeit (ms)";"Test-ID";"Version";"Betriebssystem";"Internet-Browser";"Uhrzeit"\n"13.01.2026";"145,07";"25,68";"20";"a751a5c0ff4843b9a034fa8aa52f22326b136ae658b4c282c4d0ede3beb9e144";"4.59";"Linux";"Firefox 146.0";"09:43:56"',
'../breitbandmessung_LA_2026-01-13/Breitbandmessung_13_01_2026_09_48_21.csv': '"Messzeitpunkt";"Download (Mbit/s)";"Upload (Mbit/s)";"Laufzeit (ms)";"Test-ID";"Version";"Betriebssystem";"Internet-Browser";"Uhrzeit"\n"13.01.2026";"150,02";"25,99";"19";"904249345e18d64af2c4906604d461bb7f481ac2b711e5b80be4ece31fb37f25";"4.59";"Linux";"Firefox 146.0";"09:48:18"',
'../breitbandmessung_LA_2026-01-13/Breitbandmessung_13_01_2026_09_47_06.csv': '"Messzeitpunkt";"Download (Mbit/s)";"Upload (Mbit/s)";"Laufzeit (ms)";"Test-ID";"Version";"Betriebssystem";"Internet-Browser";"Uhrzeit"\n"13.01.2026";"152,00";"25,96";"18";"9a39a3bd62c499679570bae2f7f63a05444a2fe40a5135018d99a3868c41a1db";"4.59";"Linux";"Firefox 146.0";"09:47:02"'}
matrix = []
for dateiname, inhalt in datei.items():
zweite_zeile = inhalt.split("\n")[1]
zweite_zeile_gesplittet = zweite_zeile.split(";")
matrix.append( zweite_zeile_gesplittet )
# print( f"{len( zweite_zeile_gesplittet )}")
matrix
[['"13.01.2026"',
'"145,07"',
'"25,68"',
'"20"',
'"a751a5c0ff4843b9a034fa8aa52f22326b136ae658b4c282c4d0ede3beb9e144"',
'"4.59"',
'"Linux"',
'"Firefox 146.0"',
'"09:43:56"'],
['"13.01.2026"',
'"150,02"',
'"25,99"',
'"19"',
'"904249345e18d64af2c4906604d461bb7f481ac2b711e5b80be4ece31fb37f25"',
'"4.59"',
'"Linux"',
'"Firefox 146.0"',
'"09:48:18"'],
['"13.01.2026"',
'"152,00"',
'"25,96"',
'"18"',
'"9a39a3bd62c499679570bae2f7f63a05444a2fe40a5135018d99a3868c41a1db"',
'"4.59"',
'"Linux"',
'"Firefox 146.0"',
'"09:47:02"']]
for zeile in matrix:
print(zeile[1])
"145,07"
"150,02"
"152,00"
list( zip(*matrix) )
[('"13.01.2026"', '"13.01.2026"', '"13.01.2026"'),
('"145,07"', '"150,02"', '"152,00"'),
('"25,68"', '"25,99"', '"25,96"'),
('"20"', '"19"', '"18"'),
('"a751a5c0ff4843b9a034fa8aa52f22326b136ae658b4c282c4d0ede3beb9e144"',
'"904249345e18d64af2c4906604d461bb7f481ac2b711e5b80be4ece31fb37f25"',
'"9a39a3bd62c499679570bae2f7f63a05444a2fe40a5135018d99a3868c41a1db"'),
('"4.59"', '"4.59"', '"4.59"'),
('"Linux"', '"Linux"', '"Linux"'),
('"Firefox 146.0"', '"Firefox 146.0"', '"Firefox 146.0"'),
('"09:43:56"', '"09:48:18"', '"09:47:02"')]
Übung Di 14:30 Uhr#
gegeben: Ein Dict für Geburtstage
"2005-01-03".split("-")
['2005', '01', '03']
geburtstage = { "Anna": "2012-01-02", "Ben": "2012-11-12", "Charly": "2014-01-02" }
g2 = { k: v.split("-") for k, v in geburtstage.items() }
g2
{'Anna': ['2012', '01', '02'],
'Ben': ['2012', '11', '12'],
'Charly': ['2014', '01', '02']}
Ggesucht:
für jedes Jahr: Wer hat Geburtstag?
So etwa soll die Lösung aussehen:
g2_invers = { "2012": { "Anna", "Ben"} , "2014": {"Charly"} }
g2_invers
{'2012': {'Anna', 'Ben'}, '2014': {'Charly'}}
Wir machen das auch gleich für die Monate:
for k,v in g2.items():
print(v[0], k)
2012 Anna
2012 Ben
2014 Charly
inverses_dict_jahr = {}
inverses_dict_monat = {}
for k,v in g2.items():
#print(v[0], k)
if v[0] not in inverses_dict_jahr.keys():
inverses_dict_jahr[ v[0] ] = set()
inverses_dict_jahr[ v[0] ].add( k )
if v[1] not in inverses_dict_monat.keys():
inverses_dict_monat[ v[1] ] = set()
inverses_dict_monat[ v[1] ].add( k )
inverses_dict_jahr, inverses_dict_monat
({'2012': {'Anna', 'Ben'}, '2014': {'Charly'}},
{'01': {'Anna', 'Charly'}, '11': {'Ben'}})
Fibonacci#
gegeben: zwei Anfangswerte einer verallgemeinderten Fibonacci-Reihe, z.B. 2 und 3, mit fib(0) == 2 und fib(1) == 3.
gesucht: Eine Funktion fib(n), die eine Liste mit den ersten n Fibonacci-Gliedern
zurückgibt.
p = 0
q = 1
ergebnis = [ p ]
n = 5
for i in range(n):
pq = p + q
ergebnis.append(pq)
p = q
q = pq
ergebnis
[0, 1, 2, 3, 5, 8]
def fib_list(x, *, p=0, q=1 ):
ergebnis = [ p, q ]
for i in range(x):
pq = p + q
ergebnis.append(pq)
p = q
q = pq
return ergebnis
def fibr(x, *, p=0, q=1 ):
if x < 0:
print( f"fib({x}) ist nicht definiert!")
return None
if x == 0:
return p
elif x == 1:
return q
else:
return fibr(x-1) + fibr(x-2)
def fibr_liste(n):
return [ fibr(x) for x in range(n+1) ]
fibr_liste(5)
[0, 1, 1, 2, 3, 5]
fib_list(n)
[0, 1, 1, 2, 3, 5, 8]
Fibonacci zurück#
https://www.codewars.com/kata/6965d769930fb2eff921668f
gegeben: ein x und ein y, z.B.
x = 398
y = 644
gesucht: p und q als Anfangsglieder eine verallgemeinerten Fibonacci-Reihe?
Korrigieren Sie folgenden Code!#
Das_kleine_Einmaleins = {}
for i in range(10):
for j in range(10):
Das_kleine_Einmaleins[ [i,j] ] = i*j
print(Das_kleine_Einmaleins)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[37], line 4
2 for i in range(10):
3 for j in range(10):
----> 4 Das_kleine_Einmaleins[ [i,j] ] = i*j
5 print(Das_kleine_Einmaleins)
TypeError: unhashable type: 'list'
Gruppeneinteilung#
https://moodle.haw-landshut.de/course/view.php?id=7763#section-2
Gruppen 1 und 2: xxx Uhr
Gruppe 1: Raum C113
Gruppe 2: D1.04
Gruppen 3 und 4: yyy Uhr
Gruppe 3: Raum C113 *Gruppe 4: D1.04
Aufwärmübung#
gegeben: Ein Dict, welche Person sich zu welcher Prüfung angemeledet hat, z.B.
anmeldung = { 1000012: [ "prog1", "mathe1", "mathe1" ],
1000013: [ "prog1", "zeichnen" ] }
gesucht:
Für jede Prüfung: Wie vielen Anmeldungen gibt es?
# Kontext
ergebnis = {}
# hier Ihre Lösung
for k, v in anmeldung.items():
...
ergebnis_1 = {}
for matrikelnummer, liste_von_pruefungen in anmeldung.items():
...# (so wäre es in der Aufgabenstellung)
# so könnte Ihre Lösung aussehen
for p in liste_von_pruefungen:
if p not in ergebnis.keys():
# initialisieren
ergebnis_1[p] = set()
ergebnis_1[p].add(matrikelnummer)
ergebnis_1
{'prog1': {1000013}, 'mathe1': {1000012}, 'zeichnen': {1000013}}
ergebnis = { k: len(v) for k,v in ergebnis_1.items() }
ergebnis
{'prog1': 1, 'mathe1': 1, 'zeichnen': 1}
ergebnis == {'mathe1': 1, 'zeichnen': 1, 'prog1': 1}
True
import pandas as pd
help(set)
Help on class set in module builtins:
class set(object)
| set(iterable=(), /)
|
| Build an unordered collection of unique elements.
|
| Methods defined here:
|
| __and__(self, value, /)
| Return self&value.
|
| __contains__(self, object, /)
| x.__contains__(y) <==> y in x.
|
| __eq__(self, value, /)
| Return self==value.
|
| __ge__(self, value, /)
| Return self>=value.
|
| __getattribute__(self, name, /)
| Return getattr(self, name).
|
| __gt__(self, value, /)
| Return self>value.
|
| __iand__(self, value, /)
| Return self&=value.
|
| __init__(self, /, *args, **kwargs)
| Initialize self. See help(type(self)) for accurate signature.
|
| __ior__(self, value, /)
| Return self|=value.
|
| __isub__(self, value, /)
| Return self-=value.
|
| __iter__(self, /)
| Implement iter(self).
|
| __ixor__(self, value, /)
| Return self^=value.
|
| __le__(self, value, /)
| Return self<=value.
|
| __len__(self, /)
| Return len(self).
|
| __lt__(self, value, /)
| Return self<value.
|
| __ne__(self, value, /)
| Return self!=value.
|
| __or__(self, value, /)
| Return self|value.
|
| __rand__(self, value, /)
| Return value&self.
|
| __reduce__(self, /)
| Return state information for pickling.
|
| __repr__(self, /)
| Return repr(self).
|
| __ror__(self, value, /)
| Return value|self.
|
| __rsub__(self, value, /)
| Return value-self.
|
| __rxor__(self, value, /)
| Return value^self.
|
| __sizeof__(self, /)
| S.__sizeof__() -> size of S in memory, in bytes.
|
| __sub__(self, value, /)
| Return self-value.
|
| __xor__(self, value, /)
| Return self^value.
|
| add(self, object, /)
| Add an element to a set.
|
| This has no effect if the element is already present.
|
| clear(self, /)
| Remove all elements from this set.
|
| copy(self, /)
| Return a shallow copy of a set.
|
| difference(self, /, *others)
| Return a new set with elements in the set that are not in the others.
|
| difference_update(self, /, *others)
| Update the set, removing elements found in others.
|
| discard(self, object, /)
| Remove an element from a set if it is a member.
|
| Unlike set.remove(), the discard() method does not raise
| an exception when an element is missing from the set.
|
| intersection(self, /, *others)
| Return a new set with elements common to the set and all others.
|
| intersection_update(self, /, *others)
| Update the set, keeping only elements found in it and all others.
|
| isdisjoint(self, other, /)
| Return True if two sets have a null intersection.
|
| issubset(self, other, /)
| Report whether another set contains this set.
|
| issuperset(self, other, /)
| Report whether this set contains another set.
|
| pop(self, /)
| Remove and return an arbitrary set element.
|
| Raises KeyError if the set is empty.
|
| remove(self, object, /)
| Remove an element from a set; it must be a member.
|
| If the element is not a member, raise a KeyError.
|
| symmetric_difference(self, other, /)
| Return a new set with elements in either the set or other but not both.
|
| symmetric_difference_update(self, other, /)
| Update the set, keeping only elements found in either set, but not in both.
|
| union(self, /, *others)
| Return a new set with elements from the set and all others.
|
| update(self, /, *others)
| Update the set, adding elements from all others.
|
| ----------------------------------------------------------------------
| Class methods defined here:
|
| __class_getitem__(object, /)
| See PEP 585
|
| ----------------------------------------------------------------------
| Static methods defined here:
|
| __new__(*args, **kwargs)
| Create and return a new object. See help(type) for accurate signature.
|
| ----------------------------------------------------------------------
| Data and other attributes defined here:
|
| __hash__ = None