
1. a) Man definiere eine Funktion, welche eine gegebene Liste filtert - und zwar unter Verwendung einer übergebenen Funktion, die für jedes Element True oder False zurückgibt. Man soll also die schon eingebaute filter-Funktion selber implementieren. Beispiel:
Code: Alles auswählen
res_a = filter_mut(list(range(12)), lambda x: x > 3)
# Ausgabe [4, 5, 6, 7, 8, 9, 10, 11]
Code: Alles auswählen
# definieren eine nicht-mutierende Funktion
def filter(liste, function):
# erzeugen leere Liste, in denen Elemente vorkommen werden, für die das Prädikat True ergibt
l = []
# jedes Element mit True als Rückgabewert wird hinzugefügt
for element in liste:
if function(element) == True:
l.append(element)
else:
pass
return l
# mutierende Funktion
def filter_mut(liste, function):
# legen index i fest
i = len(liste)
# prüfe für jedes Element (vom letzten zum ersten), ob Funktion False liefert
while i >= 1:
if function(liste[i-1]) == False:
# entferne Element, wenn False Rückgabewert ist
liste.remove(liste[i-1])
else:
pass
i -= 1
return liste
# Testprogramm
res1 = filter(list(range(10)), lambda x: x > 5)
res2 = filter(list(range(10)), lambda x: x%2 == 0)
print(res1) # Ausgabe [6, 7, 8, 9]
print(res2) # Ausgabe [0, 2, 4, 6, 8]
print()
res_a = filter_mut(list(range(10)), lambda x: x > 5)
res_b = filter_mut(list(range(10)), lambda x: x%2 == 0)
print(res_a) # Ausgabe [6, 7, 8, 9]
print(res_b) # Ausgabe [0, 2, 4, 6, 8]
Analog dazu Aufgabe b): Man definiere eine Funktion zip, welche zwei Listen als Eingabe erhält und diese elementweise mit einer übergebenen zweistelligen Funktion kombiniert. Die Ergebnisse der elementweisen Kombination sollen als neue Liste zurückgegeben werden. Man soll also die eingebaute zip-Funktion selbst implementieren.
Meine Lösung:
Code: Alles auswählen
def listToDict(a, k):
# Erstellen von Dictionary und Liste, die die Elemente der k-ten Spalte enthält
dc = {}
l = []
# Entfernen der k-ten Spalte der Tabelle und Hinzufügen dieser in eine separate Liste,
# die damit die Schlüssel des Dictionarys enthält
for i in range(len(a)):
l.append(a[i][k])
a[i].remove(a[i][k])
# jedem Schlüssel, also i-tem Element der sep. Liste, die restliche i-te Liste aus a zuordnen
for i in range(len(l)):
dc[l[i]] = a[i]
return dc
# Testprogramm
a = [["Mustermann", "Max", 1234],["Exemplaris", "Emilie", 7890]]
b = [["Mustermann", "Max", 1234, 'Berlin'],["Exemplaris", "Emilie", 7890, 'Kiel'],
["Richter", "Horst", 4444, 'München']]
d = listToDict(a, 2)
print(d)
d2 = listToDict(b,1)
print(d2)