下記コードで,listにinsertした結果が反映されない理由がよく分かりません.
教えていただきたくお願いします.python コード list=[1,3,4,5] a=list.insert(1,2) print(list.insert(1,2)) #結果がNoneになる print(a) #結果がNoneになる print(list) #正常
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
https://docs.python.org/ja/3/library/stdtypes.html
コレクションクラスには、ミュータブルなものがあります。コレクションのメンバをインプレースに足し、引き、または並べ替えて、特定の要素を返さないメソッドは、コレクション自身ではなく None を返します。
https://docs.python.org/ja/3/faq/programming.html#why-did-changing-list-y-also-change-list-x
ある演算 (たとえば y.append(10), y.sort()) がオブジェクトを変更する一方で、外見上は似た演算 (たとえば y = y + [10], sorted(y)) は新しいオブジェクトを作ります。Python では一般に (そして標準ライブラリの全てのケースで)、このような 2 つのタイプの演算にまつわる混乱を避けるために、オブジェクトを変更するメソッドは None を返します。ですからもしあなたが誤って y の複製の並び替えをするつもりで y.sort() と書いた場合に結果手にするのは None でしょうから、あなたのプログラムは簡単に診断出来るエラーを起こすでしょう。
投稿2020/04/21 15:22
総合スコア11235
0
ベストアンサー
list.insert
メソッドの「返り値」はNone
です。メソッドの副作用で対象リストに要素が追加されます。
これはPython言語の開発陣が意図的にそうしたものです。
ある演算 (たとえば y.append(10), y.sort()) がオブジェクトを変更する一方で、外見上は似た演算 (たとえば y = y + [10], sorted(y)) は新しいオブジェクトを作ります。Python では一般に (そして標準ライブラリの全てのケースで)、このような 2 つのタイプの演算にまつわる混乱を避けるために、オブジェクトを変更するメソッドは None を返します。ですからもしあなたが誤って y の複製の並び替えをするつもりで y.sort() と書いた場合に結果手にするのは None でしょうから、あなたのプログラムは簡単に診断出来るエラーを起こすでしょう。
プログラミング FAQ — Python 3.8.2 ドキュメント
同様の考え方はPythonに限らず、古くからあるものです。コマンドクエリ分離原則という立派な名前までついています。
投稿2020/04/21 15:25
総合スコア30935
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
リファレンスによると、
s.insert(i, x)
s の i で与えられたインデックスに x を挿入します。 (s[i:i] = [x] と同じ)
代入と同じなので、結果はNone
です。
挿入結果は、対象オブジェクトに反映されます。
投稿2020/04/21 14:28
総合スコア85949
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/22 06:48
2020/04/22 07:30