ホームページ >バックエンド開発 >Python チュートリアル >Python ループ内でリスト要素を直接変更できないのはなぜですか?
Python ループでのリスト要素の変更が無駄であることが判明する理由
Python でリストをトラバースしているときに、多くのプログラマは予期せぬ障害、つまり機能不全に遭遇します。従来のループを通じて要素を変更します。説明すると、
li = ["spam", "eggs"] for i in li: i = "foo" print(li) # Output: ["spam", "eggs"]
リスト要素に "foo" が割り当てられているように見えますが、リストは変更されません。この複雑な動作は、Python がリストを含むループを処理する方法に起因しています。
舞台裏では、Python ループはリストのインデックスを反復処理することによって動作します。上の例では、各インデックス (リスト内の項目に対応) に対して、新しい一時変数 i が作成されます。 i への代入はこのローカル変数にのみ影響し、実際のリスト要素には影響しません。
リスト要素を正常に変更するには、次の例のようにリスト内包表記を使用する必要があります。
li = ["foo" for i in li] print(li) # Output: ["foo", "foo"]
あるいは、インデックスを直接反復処理します。
for idx in range(len(li)): li[idx] = "foo" print(li) # Output: ["foo", "foo"]
あるいは、 enumerate() function:
for idx, item in enumerate(li): li[idx] = "foo" print(li) # Output: ["foo", "foo"]
これらのソリューションを採用することで、プログラマは自信を持ってループ内のリスト要素を変更でき、リストを変更しないままにする無駄な代入を回避できます。
以上がPython ループ内でリスト要素を直接変更できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。