Seite 1 von 1

Liste aufteilen

Verfasst: Dienstag 13. Oktober 2020, 17:11
von graeberlukas
Guten Abend,

vielleicht könnt ihr mir ja helfen, bei folgenden Problem:

Ich habe die Liste:
L = [ 1, 2, "drei", '4', [5], (6, 7), "Ein Text" ]

Nun möchte ich die Liste aufteilen in zwei Listen G für Elemente mit geraden Index und U mit ungeraden Index. Ich würde es so lösen:

L[::0] für gerade
L[1::2] für ungerade

Wie gehe ich aber vor wenn ich es mit einer if - else Konstruktion lösen will?

Mein Ansatz war so:
G = [ ]
U = [ ]

gerade = L[0::2]

for x in L:
if x == gerade:
G.append(x)
else:
U.append(x)

print(G, U)

Leider bekomm ich alle Elemente in U hinein. G bleibt leer. Weiß jemand wo ich meinen Fehler gemacht habe?
Und wie würde ich vorgehen müssen wenn ich die obige Liste X in zwei Listen Strings und keine Strings unterteilen will?

Bedanke mich jetzt schon für eure Hilfe :)

Re: Liste aufteilen

Verfasst: Dienstag 13. Oktober 2020, 19:33
von MaximalMax
Durch eine For-Schleife, If-Blöcke und Modulo kann man das super schaffen :D

Code: Alles auswählen

liste = [1, 2, 3, 4]
ungerade = []
gerade = []

for i in liste:
    if i % 2:
        ungerade.append(i)
    else:
        gerade.append(i)
Ich hoffe mal, dass das keine Hausaufgabe ist ...

Re: Liste aufteilen

Verfasst: Dienstag 13. Oktober 2020, 21:14
von Sirius3
@Maximalmax: die Elemente der Liste bestehen aber nicht aus aufsteigenden Zahlen.

@graeberlukas: die erste Lösung hast du nicht getestet. Bei der zweiten Lösung solltest du dir mal den Inhalt der Variablen x und gerade anschauen. In welchem Fall kann denn die Bedingung x == gerade erfüllt sein?
Du brauchst einen Index, den du per enumerate bekommst, für den du prüfen kannst ob er gerade oder ungerade ist.

Re: Liste aufteilen

Verfasst: Freitag 16. Oktober 2020, 07:52
von Jankie
Mit List comprehension, der index() Funktion und Modulo:

Code: Alles auswählen

L = [ 1, 2, "drei", '4', [5], (6, 7), "Ein Text" ]

gerader_index = [x for x in L if L.index(x) % 2 == 0]
ungerader_index = [x for x in L if L.index(x)  % 2 != 0]
oder mit enumerate()

Code: Alles auswählen

gerader_index = [value for index, value in enumerate(L) if index % 2 == 0]
ungerader_index = [value for index, value in enumerate(L) if index % 2 != 0]

Re: Liste aufteilen

Verfasst: Freitag 16. Oktober 2020, 07:57
von __blackjack__
@Jankie: Das ist superineffizient und *fehlerhaft*! Das funktioniert hier zufällig weil alle Elemente verschieden sind und keines mehrfach vorkommt.

Code: Alles auswählen

In [165]: L = [42] * 4                                                          

In [166]: [x for x in L if L.index(x) % 2 == 0]                                 
Out[166]: [42, 42, 42, 42]

In [167]: [x for x in L if L.index(x)  % 2 != 0]                                
Out[167]: []