Seite 1 von 1

list comprehension Hilfe

Verfasst: Dienstag 14. Februar 2017, 21:02
von Kneddel
Hi Liebes Forum,
Ich beschäftige mich gerade mit list comprehension und komme nicht wirklich weiter. Gegeben habe ich eine Liste mit mehreren Unterlisten. In diesen Unterlisten befinden sich mehrere Zahlen in Form von Strings. Nun versuche ich diese Liste so zu verändern, dass die Zahlen in den Unterlisten Ints sind. Dabei bin ich auf das Thema list comprehension und der map Funktion gestoßen, schaffe es aber nicht auf diesen Fall anzuwenden. Die Verschachtelung krieg ich nicht wirklich auf die Reihe. Vielleicht kann mir ja jemand helfen :)
LG

Re: list comprehension Hilfe

Verfasst: Dienstag 14. Februar 2017, 21:21
von Sirius3
@Kneddel: verschachtelte Listcomprehensions sind nicht unbedingt lesbar. Wie hast Du das Problem denn bisher gelöst?

Re: list comprehension Hilfe

Verfasst: Dienstag 14. Februar 2017, 21:26
von BlackJack
@Kneddel: Schreib das einfach mit zwei ``for``-Schleifen ohne „list comprehension“ (LC) und dann mach Dir klar wie man ganz allgemein eine ``for``-Schleife die Elemente an eine vormals leere Liste anhängt, in eine LC umschreibt. Und das machst Du dann zuerst mit der inneren ``for``-Schleife. Und wenn das funktioniert, wiederholst Du den Vorgang mit der äusseren ``for``-Schleife.

Falls Du es noch nicht getan hast, arbeite das Tutorial in der Python-Dokumentation durch. Da werden LCs, auch verschachtelt, erklärt. Mit Beispielen.

Re: list comprehension Hilfe

Verfasst: Dienstag 14. Februar 2017, 21:33
von Kneddel
Bisher hab ich noch nichts... Beschäftige mich damit erst seit heute Abend. Mein erster Versuch war:

Code: Alles auswählen

result = [int(y) for x in list for y in x]
Klappt aber nicht so wie es soll...

Re: list comprehension Hilfe

Verfasst: Dienstag 14. Februar 2017, 21:35
von Kneddel
BlackJack hat geschrieben:@Kneddel: Schreib das einfach mit zwei ``for``-Schleifen ohne „list comprehension“ (LC) und dann mach Dir klar wie man ganz allgemein eine ``for``-Schleife die Elemente an eine vormals leere Liste anhängt, in eine LC umschreibt. Und das machst Du dann zuerst mit der inneren ``for``-Schleife. Und wenn das funktioniert, wiederholst Du den Vorgang mit der äusseren ``for``-Schleife.

Falls Du es noch nicht getan hast, arbeite das Tutorial in der Python-Dokumentation durch. Da werden LCs, auch verschachtelt, erklärt. Mit Beispielen.
Werd ich jetzt mal probieren.

Re: list comprehension Hilfe

Verfasst: Dienstag 14. Februar 2017, 21:44
von nezzcarth
Kneddel hat geschrieben:Bisher hab ich noch nichts... Beschäftige mich damit erst seit heute Abend. Mein erster Versuch war:

Code: Alles auswählen

result = [int(y) for x in list for y in x]
Klappt aber nicht so wie es soll...
Für welche Form der Liste denn? Für sowas wie [['1', '2'], ['4', '3']] klappt es eigentlich schon (du solltest nur vielleicht nicht 'list' überschreiben, auch wenn das hier keinen Fehler auslöst).

Edit:
Und weil du map(int, iterable) in deinem Ausgangspost erwähnst: Das ist in dieser Variante eigentlich nur eine Kurzschreibweise für eine entsprechende List Comprehension (Python 2) bzw. einen Generatorausdruck (Python 3). Das hilft vielleicht nicht weiter, wenn das Verständnis von LCs noch Probleme bereitet.

Re: list comprehension Hilfe

Verfasst: Dienstag 14. Februar 2017, 21:50
von Kneddel
nezzcarth hat geschrieben:
Kneddel hat geschrieben:Bisher hab ich noch nichts... Beschäftige mich damit erst seit heute Abend. Mein erster Versuch war:

Code: Alles auswählen

result = [int(y) for x in list for y in x]
Klappt aber nicht so wie es soll...
Für welche Form der Liste denn? Für sowas wie [['1', '2'], ['4', '3']] klappt es eigentlich schon (du solltest nur vielleicht nicht 'list' überschreiben, auch wenn das hier keinen Fehler auslöst).

Edit:
Und weil du map(int, iterable) in deinem Ausgangspost erwähnst: Das ist in dieser Variante eigentlich nur eine Kurzschreibweise für eine entsprechende List Comprehension (Python 2) bzw. einen Generatorausdruck (Python 3). Das hilft vielleicht nicht weiter, wenn das Verständnis von LCs noch Probleme bereitet.
Das Problem ist, dass die Liste nun keine Sublisten mehr enthalten, welche ich danach noch brauche. Das bereitet mir gerade noch Probleme wie ich das noch reinbekomme.

Re: list comprehension Hilfe

Verfasst: Dienstag 14. Februar 2017, 21:54
von nezzcarth
Kneddel hat geschrieben: Das Problem ist, dass die Liste nun keine Sublisten mehr enthalten, welche ich danach noch brauche. Das bereitet mir gerade noch Probleme wie ich das noch reinbekomme.
Ja, natürlich sind die weg: Du iterierst zuerst über die äußere Liste (die Listen enthält), dann über diese Teillisten und lässt als Ergebnis die Elemente dieser inneren Listen in eine einzige äußere schreiben. Wenn du die Sublisten erhalten möchtest, muss die hintere Schleife leicht abgewandelt nach vorne in eine eigene List Comprehension wandern.