Evolution eines Python-Programmierers - Listen
Verfasst: Dienstag 13. Dezember 2011, 13:03
Gegeben sei folgende Datenstruktur.
Darin abgebildet sind User mit ID und Name die jeweils einer Gruppe zugeordnet sind. Es soll eine Funktion geschrieben werden, die alle IDs als Liste zurückgibt.
Der von einer anderen Programmiersprache kommende Newbie löst das so:
Mit etwas mehr Erfahrung und vorherigem Studium des Tutorials wird die Lösung pythonischer:
Nachdem man Python endlich verstanden hat ergibt sich dann:
Und irgendwann kennt man dann auch die Standardbibliothek:
Eine Alternative wäre chain.from_iterable(data).
Gefährlich wird es nur, wenn man in der Standardbibliothek andere Dinge findet und die als geeignet ansieht:
Ja, das funktioniert - und bricht dann mit anderen Daten plötzlich zusammen. Nicht nachmachen!
Code: Alles auswählen
data = [[(23, 'Alpha'), (42, 'Bravo')], [(11, 'Charlie')], [(12, 'Delta'), (13, 'Echo')]]
Der von einer anderen Programmiersprache kommende Newbie löst das so:
Code: Alles auswählen
def get_ids_newbie(data):
ids = []
for i in range(len(data)):
for j in range(len(data[ i])):
element = data[ i][j]
ids.append(element[0])
return ids
Code: Alles auswählen
def get_ids_beginner(data):
ids = []
for group in data:
for element in group:
ids.append(element[0])
return ids
Code: Alles auswählen
def get_ids_advanced(data):
ids = [element[0] for group in data for element in group]
return ids
Code: Alles auswählen
from itertools import chain
def get_ids_profi(data):
return [element[0] for element in chain(*data)]
Gefährlich wird es nur, wenn man in der Standardbibliothek andere Dinge findet und die als geeignet ansieht:
Code: Alles auswählen
import re
def get_ids_braindamaged(data):
return eval('[' + re.sub(r'[^\d,]+,?', '', repr(data)) + ']')