2016-10-05 10 views
-1

ループ内のいくつかのインデックスが欠落している理由を理解できませんか? たとえば、インデックス番号3です。 この方法で一意の要素を削除したいだけです。私は別のものを知っていますが、私はこの問題(または私)に何が間違っているのか分かりません。Python:for-loop wrong output

lst = [2, 7, 1, 9, 3, 5, 2, 1] 

def check(lst): 
    result = lst 
    print(lst) #checking 
    for num in lst: 
     print("index:", num) #checking 
     print("num:", num) #checking 
     if lst.count(num) < 2: 
      print("count:", lst.count(num)) #checking 
      result.remove(num) 
    return(result) 

print(check(lst)) 

出力

[2, 7, 1, 9, 3, 5, 2, 1] 
index: 2 
num: 2 
index: 7 
num: 7 
count: 1 
index: 9 
num: 9 
count: 1 
index: 5 
num: 5 
count: 1 
index: 1 
num: 1 
[2, 1, 3, 2, 1] 
+0

あなたはそれを繰り返すので、リストを変更しないでください!!!! –

+0

あなたは['enumerate()'](https://docs.python.org/2/library/functions.html#enumerate)を探していると思います。また、**反復処理中にリストを変更することはありません**。それは悪い、悪いことになります.... –

+0

あなたがそれを反復しているときに、あなたはリストから要素を削除しています。私は100%は確信していませんが、削除中にインデックスがそのまま維持されると考えています。つまり、インデックスが要素番号4を指していて、数字4を削除すると、インデックスがインクリメントされ、1つの要素をスキップします。より良い方法は、削除するアイテムのリストを保持し、このループの後に削除することです。 –

答えて

0

あなたがやるべきでない、それを反復しているとして、あなたはリストから項目を削除しています。

result = lstlstのコピーを作成しません;それは同じオブジェクトを参照する新しい名前を作成します)

あなただけの重複要素を削除したい場合は、set(あなたがを使用することができますあなたの注文を失う可能性があります):

lst = list(set(lst)) 
+0

リストのコピーをどのように作成できるのかを知ることは良い考えではないでしょうか( 'result = lst [:]')? –

+2

これは本当に答えではありません... –