2017-10-16 2 views
0

Ich versuche, alle erste Element einer Liste zu löschen, die unter ihnen gleich sind, aber ich fand meinen Code hässlich.Wie füge ich eine for-Schleife mit einer if-else-Anweisung zusammen?

Hier ein Beispiel: my_list = [1,1,1,9,9,2] werden my_list = [1,9,9,2]

for spot_prec, spot in zip(my_list, my_list[1:]): 
    if spot_prec == spot: 
     del spot_prec 
    else: 
     break 

Wie es zu komprimieren? Ich habe von Generator-Ausdruck gehört, aber ich habe ein Problem, meine else break-Anweisung aufzunehmen.

+0

Sieht aus wie Sie in den [ 'itertools' Rezepten] (https://docs.python.org/3/library/itertools.html#itertools-recipes gefunden für' unique_justseen' gesuchte). –

+2

Was versuchst du genau zu machen - nicht sicher, warum du hier loopst ...? Und ich glaube nicht, dass Code tut, was Sie denken, dass es entweder ist ... –

+0

Können Sie Beispieleingabe und gewünschte Ausgabe einschließen? –

Antwort

-1

Nach der Klärung von OP scheint, was benötigt wird, ist so etwas wie:

for ii, element in enumerate(my_list): 
    if element == my_list[0]: 
     continue 
    else: 
     break 
new_list = my_list[ii-1:] 

Auch mit itertools dropwhile, können wir das Element 0 und das Ergebnis fällt jedes Element am Anfang verketten, die die gleiche ist erstes Element:

new_list = [my_list[0]] + list(dropwhile(lambda x: x == my_list[0], my_list)) 
+0

Ich möchte nicht nur das erste und zweite Element überprüfen, hier ein Beispiel: 'my_list = [1,1,1,9,9,2]' wird 'my_list = [1,9,9,2]' –

+0

Sie können es dann auf verschiedene Arten tun, ich habe meine Antwort geändert, um ein Paar Beispiele aufzunehmen, ich bevorzuge das erste, da es offensichtlicher ist. – Jblasco