2017-10-30 23 views
0

NOTEを通じて追加さ:私はdel重複要素は、forループ

を使用する必要はありませんが、私は内蔵のdel声明を避けたい理由である、より良いアルゴリズムを理解しようとしています。

ランダムに生成された10個の数字のリストを作成しています。

if remove_index < lst_size: 
    for value in range(remove_index, lst_size-1): 
     lst[value] = lst[value+1] 
    lst_size -= 1 

すべてはループが二回最後の項目を追加していることを除いて、正常に動作します:私は、forループを使用して、インデックスして、リストから項目を削除しようとしています。つまり、8番目のアイテムが4の値を持つ場合、9番目のアイテムも4と評価されます。なぜこれを行うのか分かりません。私はまだ選択したインデックスで値を移動することができますが(すべてを動かしながら)、重複しています。

+0

[反復処理中にリストから項目を削除する](https://stackoverflow.com/questions/1207406/remove-items-from-a-list- while-iterating) – DeepSpace

+0

これは本当に私の回答ではありません質問。私は、インデックスで要素を削除するさまざまな方法があることを知っています。私は知りたいのですが、なぜこの複製がリストの最後に追加されているのですか。 – Dexstrum

答えて

1

あなたのリストには何も追加されていません。それはlst_size要素から始まり、何も削除しないので、完了するまでに同じ番号が保持されます。

remove_index以降のすべてのアイテムをリストの前のインデックスにコピーした後は、最後のアイテムを削除したい場合は、delまたはlst.pop()のいずれかを使用します。

ちらつきが聞こえる危険がありますが、これは一般的なルールです。何かしたいのであれば、する必要があります。 「私はdelを使用したくありません」と言ってもその事実は変わりません。

lst_sizeは、リストに影響を与えません。リストのサイズを保存するために使用していても、接続されておらず、変更しても影響がありません。

+0

この特定の例では、組み込み関数なしでこのプロセスを再作成できるようにしたいので、delを使用したくありません。 Delは私が達成しようとしているのと同じ目標を達成しています。目的のインデックスを選択し、そのインデックスを削除し、他のすべての要素を1つのインデックスに移動します。それが私が再現しようとしているものです。 – Dexstrum

+0

@Dexstrumしかし、あなたは*何も動かすことはありません...あなたは*コピーしています*最後の2つを意味する値はゼロで終わる項目を削除するまで同じになります。 *追加* ...何が起こっているかを見るには、 'for'ループの先頭に' print(lst) 'を追加して、何が起こるのかを見てみてください。 –

+0

それが私の必要な答えです。私はちょうどコピーしていて、何も動かさなかったことに気付かなかった。 – Dexstrum

関連する問題