QuaPa77
@QuaPa77 (p q)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Python 二次元配列におけるappendの使い方

解決したいこと

Pythonの二次元配列についての質問です

発生している問題・エラー

出ているエラーメッセージを入力

スクリーンショット 2021-11-30 23.29.58.png

画像の上にあるのがhoney.txtです
配列colsの各配列にこのhoney.txtから列ごとに情報をまとめて収納したいのですが、出力結果が思った通りになりません。

cols[0] = [1999,2000,2001,...]
cols[1] = [2652,2622,2550,...]

となれば成功です。

どうやらappend一回でcols[0]からcols[6]の全ての末尾に例えば1999,2652,...などの数が追加されているのが原因だと思うのですが、どうすればappend一回でcols[0]のみに1999を追加できますか?

0

1Answer

リストインスタンスの同一性に起因するありがちな問題ですね。
根本的には次と同じことが起きています。

a = []
b = a
a.append(0)

print(b)  # [0]
print(b is a)  # True

掲載のコードですと、

cols = [[]] * 7

これは、外側のリストに同一の空リストが7重に登録されている状態で、
以下のように書いた場合と同じです。

a = []
cols = [a, a, a, a, a, a, a]

意図に適ったことをするためには、異なるリストのインスタンスを登録する必要があります。

cols = [[], [], [], [], [], [], []]

リスト内包表記を用いれば簡潔に記述できます。

cols = [[] for _ in range(7)]
2Like

Comments

  1. @QuaPa77

    Questioner

    よく分かりました!
    ありがとうございます!

Your answer might help someone💌