私は誰かのためにいくつかのコードをデバッグしようとしていますが、かなり奇妙なシナリオに遭遇しました。コードの目的は、指定されたリストで重複を検索し、重複のないリストを返すことです。(注意してください、コードを書いている人は、私が個人的に新しいリストに各値を追加するだけなのに、リストから重複を単純に削除することを選択しました。しかし、私はまだ奇妙なことに興味をそそられています)。コードは次のとおりです。
def remove_duplicates(duplicates):
duplicates_del = duplicates
for i in duplicates_del:
if duplicates_del.count(i) > 1:
duplicates_del.remove(i)
return duplicates_del
remove_duplicates([3, 3, 3, 3, 3, 3])
実行すると、コードが返さ[3, 3, 3]
れ、いくつかのデバッグの後、コードが 4 になるまで問題なく動作することがわかりましたduplicates_del.count(i)
。次のラウンドでは、for ステートメント内のすべてを完全にスキップし、return ステートメントに直接移動します。その結果、得られる答えが得られます。
if ステートメントを に変更するwhile duplicates_del.count(i) > 1:
と、コードが問題なく実行されることがわかりました。
デバッガーのコードを調べたところ、カウントを無視できるブレークポイント クラスがあることがわかりました。if ステートメントが何らかの形でこのブレークポイントをトリガーしているのでしょうか、それとも while ループの代わりに if ステートメントを使用するとコードが完全に実行されない別の理由がありますか?