2017-10-24 8 views
0

Ich habe diesen Code. Ich will diese Zahlen in list_d übertragen list_e, aber das Ergebnis ist:isinstance() Methode Python gibt falsche Werte zurück

Before: ['a', 'b', 'c', 3, 5, 4, 'd', 'e', 'f', 1, 'ee'] 
Before: [] 
After: ['a', 'c', 5, 'd', 'e', 'f', 1, 'ee'] 
After: [3, 4, 1] 

Irgendwie 5 und 1 knallt nicht aus und 1 angefügt list_e aber 5 nicht. Was ist falsch an meinem Code?

+2

Sie sollen nie Ändern Sie eine Liste, während Sie darüber iterieren. Die Schleife weiß nicht, dass Sie Objekte aus ihr heraussägen, so dass es zu einer verwirrenden Ausgabe kommt. – offeltoffel

+0

Beachten Sie auch, 'pop (x)' knallt das Element bei * index x * –

+0

warum nicht einfach 'filter (..., ...)' verwenden –

Antwort

5

Sie ändern die Liste, während Sie darüber iterieren. Sie könnten nur Liste Verständnis verwenden beiden Listen zu machen, aber ich würde Blick in warum Sie eine Multi-typisierte Liste an erster Stelle

non_ints = [not isinstance(a, int) for a in list_d] 
ints = [isinstance(a, int) for a in list_d] 

oder als einzelne interation Version haben

non_ints = [] 
ints = [] 

for a in list_d: 
    if isinstance(a, int): 
     ints.append(a) 
    else: 
     non_ints.append(a) 
Verwandte Themen