Anfängerfragen zu Listen: Nächstes Element

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
maow
User
Beiträge: 29
Registriert: Mittwoch 24. Februar 2016, 16:30

Hallo ich bin Pythonanfänger und habe folgendes Problem:

Gegeben sei eine Liste mit strings A=[1,2,3,5,6,M,-,100,t,e,s,t]

Ziel:
Es soll der Teil vor dem ersten Buchstabe in der Liste in eine Liste abgelegt werden. Der Rest soll in eine andere Liste abgelegt werden. Ich scheiter leider schon bei dem ersten Teil. Nämlich soll das Zählen zunächst erstmal ab einem gewissen Fortschritt unterbrochen werden.

Lösung/Ideen:

Vermutlich könnt ihr das super schnell lösen. Ich hab aber als (ziemlich sehr^10 blutiger) Anfänger damit ziemliche Probleme :( Gleich bei mehreren Dingen, hier mal ein Codeschnipsel:

Code: Alles auswählen

A=['1','2','3','5','6','M','-','100','t','e','s','t']
liste_B=[]
for i in A:
            if i.isdigit():
                liste_B.append(i)
                
Es wird also in die Liste A immer dann eine Zahl geschrieben, wenn diese in der Liste A ist. Leider entspricht das nicht dem Ziel, denn er soll ja nach der Zahl 6 aufhören (ich hab an der Stelle natürlich dann mit elif weitergeschrieben, aber das klappt alles bisher nicht)

Gleich eine Frage zu dem Code vorweg: Kann ich mir das A=[] nicht irgendwie sparen ?

Es müsste also noch eine Abbruchbedingung dazu kommen oder aber "wenn das nächste Element ein Buchstabe ist". Dachte da an sowas hier (geht natürlich nicht, da Anfänger ^^). Ich vermute mal das i+1 schlichtweg falsch ist oder ?

Code: Alles auswählen

A=['1','2','3','5','6','M','-','100','t','e','s','t']
liste_A=[]
for i in A:
            if i.isdigit() and (i+1).isalpha()==False:  # bzw. (i+1).isdigit()==True
                A.append(i)
            else:
               break
                
Zuletzt geändert von maow am Freitag 7. Mai 2021, 17:01, insgesamt 1-mal geändert.
maow
User
Beiträge: 29
Registriert: Mittwoch 24. Februar 2016, 16:30

Oh ich glaub ich habs eben selbst gelöst :mrgreen: .. juhu Newbieglücksmoment :D:

Code: Alles auswählen

        for i in A:
            if i.isdigit():
               liste_B.append(i)
            else:
                break
Aber da kommt ja noch mehr :( Wie würde ich das denn audrücken mit dem nächsten Element? Also wenn ich sage i+1?
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Code: Alles auswählen

In [29]: list(more_itertools.split_before(A, lambda s: not s.isdigit(), 1))     
Out[29]: [['1', '2', '3', '5', '6'], ['M', '-', '100', 't', 'e', 's', 't']]
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten