2017-10-24 9 views
0
list_d = ["a","b","c",3,5,4,"d","e","f",1,"ee"] 
list_e = [] 

print("Before: %s"%(list_d)) 
print("Before: %s"%(list_e)) 

for item in list_d: 
    if isinstance(item,int): 
     list_d.pop(item) 
     list_e.append(item) 

print("After: %s"%(list_d)) 
print("After: %s"%(list_e)) 

私はこのコードを持っています。私はlist_eするlist_dにこれらの数字を転送したいのですが、結果は次のとおりです。isinstance()メソッドpythonが間違った値を返す

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] 

なんとか5と1が飛び出していないと1がlist_eに付加されているが、5ではありません。私のコードに何が問題なのですか?

+2

などを多型指定されたリストを持っている理由に見てねリストを反復している間にリストを変更してください。ループはあなたが項目をポップしていることを知らないので、混乱した出力を生成します。 – offeltoffel

+0

'pop(x)'は、* index x * –

+0

の項目をポップする理由は 'filter(...、...)'だけでなく、 –

答えて

5

リストを反復するときにリストを変更しています。あなただけの両方のリストを作るために、リストの内包表記を使用することができますが、私は、あなたが最初の場所で

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

またはあなたはいけ単一interationバージョン

non_ints = [] 
ints = [] 

for a in list_d: 
    if isinstance(a, int): 
     ints.append(a) 
    else: 
     non_ints.append(a) 
関連する問題