リストの削除中の反復変更について
以下の Python コードは、リストから代替要素を削除することを目的としています。
a = list(range(10)) remove = False for b in a: if remove: a.remove(b) remove = not remove print(a)
ただし、予期しない出力 [0, 2, 3, 5, 6, [0、2、4、6、8] の代わりに 8、9] を使用します。これは、反復プロセスの動的な性質に起因します。
出力値が [0, 2, 3, 5, 6, 8, 9]:
である理由ループが a 内の要素を反復処理すると、特定の要素を削除してリストが変更されます。これは基礎となる反復子に影響を与え、出力での削除パターンを説明します。以下に段階的な内訳を示します。
エラー メッセージ:
Python はパフォーマンスを優先するため、変更されたイテレータに関するエラーをスローしません。考えられるすべての反復変更を検出して処理すると、大幅なオーバーヘッドが発生します。したがって、Python は、このような状況では、明示的なエラー メッセージよりも実行速度を優先します。
以前の Python バージョンとの一貫性:
ここで説明されている動作は、Python のバージョン全体で一貫しています。 1.4に戻ります。この方法で反復変更を処理するのは、可変シーケンス実装の固有の機能です。
以上がPython で反復中にリストから要素を削除すると予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。