[解決済み] Pythonのappend()とリストの+演算子、なぜ結果が違うのか?
2022-06-16 02:14:26
質問
なぜ、この2つの操作(
append()
を応答します。
+
) は異なる結果を与えるのでしょうか?
>>> c = [1, 2, 3]
>>> c
[1, 2, 3]
>>> c += c
>>> c
[1, 2, 3, 1, 2, 3]
>>> c = [1, 2, 3]
>>> c.append(c)
>>> c
[1, 2, 3, [...]]
>>>
最後のケースでは、実際には無限回の再帰があります。
c[-1]
と
c
は同じです。とはなぜ違うのでしょうか?
+
の操作ではなぜ違うのでしょうか?
どのように解決するのですか?
なぜかを説明する。
その
+
操作
が追加されます。
配列
要素を元の配列に追加します。このとき
array.append
の操作は、元の配列の末尾に配列(あるいは任意のオブジェクト)を挿入し、その結果
selfへの参照
を参照することになります(それゆえ、無限再帰となります)。
ここでの違いは、+操作は配列を追加するときに特定の動作をすることです(他のものと同様にオーバーロードされています。 この章 を参照)、要素を連結して追加するときに特有の動作をします。しかし、append-methodは文字通り、その要素を取る代わりに、あなたが与えた右側のオブジェクト(配列または他のオブジェクト)を追加します。
代替案
使用方法
extend()
を使えば、+演算子に似た働きをする関数を使うことができます(他の人もここで紹介しているとおりです)。リストに対して + 演算子で append を真似るという逆のことをするのは賢明ではありません(私の
以前のリンク
を参照してください)。
小さな歴史
お楽しみのために、ちょっとした歴史を紹介します。 の誕生、Pythonのarrayモジュール の誕生です。驚くかもしれませんが、配列はシーケンスとリストが登場したずっと後に追加されました。
関連
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] 文字列フォーマット:% vs. .format vs. f-stringリテラル
-
[解決済み] pandasを使った "大量データ "ワークフロー【終了しました
-
[解決済み] 2つのリストの差を取得する
-
[解決済み] なぜ[]はlist()よりも速いのですか?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
pythonを使ったオフィス自動化コード例
-
PythonはWordの読み書きの変更操作を実装している
-
[解決済み】Python regex AttributeError: 'NoneType' オブジェクトに 'group' 属性がない。
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない
-
[解決済み] Pythonの".append() "と" += []"の違いは何ですか?