2017-06-30 10 views
1

私は文字列と整数からなるリストを持っています。私は整数だけをポップし、それを別のリストに入れなければなりません。 私のコード:上記のコードのリストの操作 - 新しいリストへの整数の抽出

list1=['a','b','c','d','e','f','g','h',1,2,3] 
list=[] 
x=0 
for i in list1: 
    if isinstance(i,int) : 
     list.append(i) 
     list1.pop(x) 
    x += 1 

print(list1) 
print(list) 

出力

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 2] 
[1, 3] 

私の質問は:なぜ、すべての整数は、私のコードでを削除されませんか?私のコードで何が間違っていますか?

+2

**反復処理中にリストを操作しないでください... –

+0

xはどのようなxを保持していますか? – Nykros

+0

リスト1のインデックス値 – geeksam

答えて

7

あなた反復同時に同じリストを操作:

for i in list1:   # iteration 
    if isinstance(i,int): 
     list.append(i) 
     list1.pop(x)  # manipulate 
    x += 1

これは通常動作しません:forループはカーソルで動作します。一方、アイテムを削除すると、要素をスキップします。

例えば、以下のように単純に、宣言型Python的アプローチを使用することをお勧めし:

list_int = [i for i in list1 if isinstance(i,int)] 
list1 = [i for i in list1 if not isinstance(i,int)] 

、あなたはへの参照を削除するので、あなたは、変数listに名前を付けるべきではありませんlistクラス。

+0

それは動作します! "list1" Willem jiを変更することはできますか? – geeksam

+0

@geeksam:反復が問題にならないわけではありません。リストからポップすることは、さらに* O(n)*操作であることに注意してください。したがって、可能であったとしても、* O(n^2)*アルゴリズムになります。 –

関連する問題