ホームページ  >  記事  >  バックエンド開発  >  Python でリストを反復処理中にリストから項目を削除すると、奇妙な結果が発生する

Python でリストを反復処理中にリストから項目を削除すると、奇妙な結果が発生する

WBOY
WBOY転載
2024-02-09 10:10:04676ブラウズ

在 Python 中迭代列表时从列表中删除项目时出现奇怪的结果

質問の内容

次のコードがあります:

リーリー

ただし、得られる結果は次のとおりです:

[2、4、6、8、10、12、14、16、18、20、21、22、23、24、25、26、27、28、29、30、31、32、33、 34、35、36、37、38、39、40、41、42、43、44、45、46、47、48、49]

もちろん、結果に 20 未満の数字が表示されないことを願っています。削除するときに何か間違ったことをしたようです。


正解


リストを反復処理しながらリストを変更しています。これは、最初のループでは i == 1 であるため、1 がリストから削除されることを意味します。次に、for ループはリストの 2 番目の項目 (2 ではなく 3) に進みます。その後、リストから削除され、for ループはリスト内の 3 番目の項目 (現在は 5) に進みます。などなど。 ^ を使用して i の値を指すと、これを視覚化するのが簡単になるかもしれません:

リーリー

これはリストの初期状態です。その後、1 が削除され、ループはリストの 2 番目の項目に進みます:

リーリー ###等。

リストを反復中にリストの長さを変更する良い方法はありません。あなたができる最善のことはこれです:

リーリー

または、インプレース変更の場合は次のようになります (括弧内は、スライスが割り当てられる前に暗黙的にタプルに変換されるジェネレータ式です):

リーリー

n を削除する前に操作を実行したい場合は、次の方法を試すことができます: リーリー

以上がPython でリストを反復処理中にリストから項目を削除すると、奇妙な結果が発生するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。