list comprehension Hilfe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Kneddel
User
Beiträge: 7
Registriert: Samstag 12. November 2016, 18:16

list comprehension Hilfe

Beitragvon Kneddel » Dienstag 14. Februar 2017, 21:02

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
Sirius3
User
Beiträge: 6118
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: list comprehension Hilfe

Beitragvon Sirius3 » Dienstag 14. Februar 2017, 21:21

@Kneddel: verschachtelte Listcomprehensions sind nicht unbedingt lesbar. Wie hast Du das Problem denn bisher gelöst?
Benutzeravatar
BlackJack
Moderator
Beiträge: 33025
Registriert: Dienstag 25. Januar 2005, 23:29
Wohnort: Berlin
Kontaktdaten:

Re: list comprehension Hilfe

Beitragvon BlackJack » Dienstag 14. Februar 2017, 21:26

@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.
“Programs must be written for people to read, and only incidentally for machines to execute.” — Abelson & Sussman, SICP (preface to the first edition)
Kneddel
User
Beiträge: 7
Registriert: Samstag 12. November 2016, 18:16

Re: list comprehension Hilfe

Beitragvon Kneddel » Dienstag 14. Februar 2017, 21:33

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...
Kneddel
User
Beiträge: 7
Registriert: Samstag 12. November 2016, 18:16

Re: list comprehension Hilfe

Beitragvon Kneddel » Dienstag 14. Februar 2017, 21:35

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.
nezzcarth
User
Beiträge: 374
Registriert: Samstag 16. April 2011, 12:47

Re: list comprehension Hilfe

Beitragvon nezzcarth » Dienstag 14. Februar 2017, 21:44

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.
Zuletzt geändert von nezzcarth am Dienstag 14. Februar 2017, 21:55, insgesamt 2-mal geändert.
Kneddel
User
Beiträge: 7
Registriert: Samstag 12. November 2016, 18:16

Re: list comprehension Hilfe

Beitragvon Kneddel » Dienstag 14. Februar 2017, 21:50

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.
nezzcarth
User
Beiträge: 374
Registriert: Samstag 16. April 2011, 12:47

Re: list comprehension Hilfe

Beitragvon nezzcarth » Dienstag 14. Februar 2017, 21:54

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder