Liste aufteilen

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.
Antworten
graeberlukas
User
Beiträge: 1
Registriert: Dienstag 13. Oktober 2020, 16:58

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 :)
Benutzeravatar
MaximalMax
User
Beiträge: 18
Registriert: Sonntag 3. Mai 2020, 00:51

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

@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.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

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]
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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]: []
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten