Guten Tag,
ich habe folgendes Problem: Ich möchte eine Liste, wo jedes Listenelement aus zwei Zahlen besteht(getrennt durch ein Leerzeichen), in zwei Listen unterteilen. Das heißt ich möchte die erste Zahl im Listenelement in eine Liste(w1) und die zweite Zahl im Listenelement in eine andere Liste(w2). Jedoch habe ich damit Schwierigkeiten dies hinzubekommen.
Liste1 = ['-50 -300' , '15 -70']
#und als Ausgabe:
w1 =['-50', '15']
w2 =['-300', '-70']
Danke schon mal für die Hilfe!
Eine Liste in zwei weitere Listen unterteilen
-
- User
- Beiträge: 7
- Registriert: Mittwoch 20. Oktober 2021, 11:04
Ich habe mit split() versucht die einzelnen Listenelemente zu teilen jedoch bekomme ich dort nur die ersten Zahlen der Listenelemente ausgegeben. Ich möchte aber als Ausgabe auch noch eine zweite Liste mit den zweiten Zahlen von jedem Listenelement:
for c in Liste1:
w1=c.split()
print(w1[0])
Du solltest dringend an Deiner Namenswahl für Variablen arbeiten. Warum benutzt Du nur einzelne Buchstaben mit einer 1 drangehängt? Das macht keinen Sinn. Variablennamen sollten sprechend sein.
Was glaubst Du, macht die [0] in Deinem Code?
Was glaubst Du, macht die [0] in Deinem Code?
-
- User
- Beiträge: 7
- Registriert: Mittwoch 20. Oktober 2021, 11:04
Alles klar!
Die [0] in meinem Code ist die Index Nummer und theoretisch müsste dann mir nur das erste Listenelement von w1 ausgegeben werden was jedoch nicht passiert.
-
- User
- Beiträge: 7
- Registriert: Mittwoch 20. Oktober 2021, 11:04
Bei mir ist die Ausgabe
also jeweils das erste Element.
Code: Alles auswählen
-50
15
- __blackjack__
- User
- Beiträge: 13004
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@terminator: Nein, es gibt Dir das erste Listenelement aus. Du denkst aber offenbar über die falsche Liste nach, denn es gibt Dir das erste Element von `w1` aus. In jedem Schleifendurchlauf. Also für *jedes* `c`. Für das erste im ersten Schleifendurchlauf, und für das zweite, im zweiten Schleifendurchlauf.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
-
- User
- Beiträge: 7
- Registriert: Mittwoch 20. Oktober 2021, 11:04
Stimmt! Hatte vergessen print(w1[0]) in die For-Schleife einzurücken. Ich habe jedoch keine Ahnung wie ich jetzt die zweiten Zahlen der Listenelemente in eine zusätzliche Liste hineinbekomme.Sirius3 hat geschrieben: ↑Mittwoch 20. Oktober 2021, 20:15 Bei mir ist die Ausgabealso jeweils das erste Element.Code: Alles auswählen
-50 15
- __blackjack__
- User
- Beiträge: 13004
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@terminator: Naja Du musst halt mit dem Index 1 darauf zugreifen. Oder, um diese undurchsichtige Indexhampelei zu vermeiden, das Ergebnis von `split()` an zwei (sinnvolle) Namen aufteilen. Und die kannst Du dann jeweils dafür verwenden um sie an die passende Liste anzuhängen. Die Du vorher erstellen musst, also *vor* dieser Schleife. Und die erste davon darf dann entweder nicht `w1` heissen, oder Du darfst den Namen in dem am Ende alle ersten Elemente landen sollen, nicht in der Schleife für ein Teilergebnis verwenden.
Code: Alles auswählen
In [200]: Liste1 = ['-50 -300' , '15 -70']
In [201]: w1, w2 = map(list, more_itertools.unzip(map(str.split, Liste1)))
In [202]: w1
Out[202]: ['-50', '15']
In [203]: w2
Out[203]: ['-300', '-70']
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
-
- User
- Beiträge: 7
- Registriert: Mittwoch 20. Oktober 2021, 11:04
Muss ich dafür noch irgend etwas importieren?__blackjack__ hat geschrieben: ↑Mittwoch 20. Oktober 2021, 22:03 @terminator: Naja Du musst halt mit dem Index 1 darauf zugreifen. Oder, um diese undurchsichtige Indexhampelei zu vermeiden, das Ergebnis von `split()` an zwei (sinnvolle) Namen aufteilen. Und die kannst Du dann jeweils dafür verwenden um sie an die passende Liste anzuhängen. Die Du vorher erstellen musst, also *vor* dieser Schleife. Und die erste davon darf dann entweder nicht `w1` heissen, oder Du darfst den Namen in dem am Ende alle ersten Elemente landen sollen, nicht in der Schleife für ein Teilergebnis verwenden.
Code: Alles auswählen
In [200]: Liste1 = ['-50 -300' , '15 -70'] In [201]: w1, w2 = map(list, more_itertools.unzip(map(str.split, Liste1))) In [202]: w1 Out[202]: ['-50', '15'] In [203]: w2 Out[203]: ['-300', '-70']
Hallo,
ja und zwar 'more_itertools'. Dass wäre das hier:
https://more-itertools.readthedocs.io/en/stable/
Grüße
Dennis
ja und zwar 'more_itertools'. Dass wäre das hier:
https://more-itertools.readthedocs.io/en/stable/
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Man kann es natürlich auch ohne `more_itertools` schreiben.
Und wenn man die Werte von w1 und w2 nicht unbedingt als Liste braucht, sondern ein Tupel reicht, dann wird es noch simpler.
Code: Alles auswählen
w1, w2 = map(list, zip(*map(str.split, Liste1)))
Code: Alles auswählen
w1, w2 = zip(*map(str.split, Liste1))
-
- User
- Beiträge: 7
- Registriert: Mittwoch 20. Oktober 2021, 11:04
Vielen Dank für die ganze Hilfe!