前提・実現したいこと
PYTHONで、for文の繰り返しで作ったリストを、別に用意したリストに追加していって、2次元リストを作りたいのですが、うまく行きません。どなたか、方法を教えていただけませんでしょうか。
要素数が4のリストがあり、その各要素が0または1の組み合わせとなる16通りのリストを要素とする16行4列の2次元リストを作りたいと思って、コードを書いてみました。
再帰が終わるごとにリスト(sa1)を表示させると、想定通りのリストができています。しかし、それをsa2に追加していくと、16行4列のリストはできるのですが、すべて[1,1,1,1]と、sa1の最後の状態になっています。
print(sa1)の時点におけるsa1の中身を追加していく方法を教えていただければ幸いです。よろしくお願いします。
以下が、出てきた結果です。エラーではありませんが、望ましい結果ではありません。
[0, 0, 0, 0] [0, 0, 0, 1] [0, 0, 1, 0] [0, 0, 1, 1] [0, 1, 0, 0] [0, 1, 0, 1] [0, 1, 1, 0] [0, 1, 1, 1] [1, 0, 0, 0] [1, 0, 0, 1] [1, 0, 1, 0] [1, 0, 1, 1] [1, 1, 0, 0] [1, 1, 0, 1] [1, 1, 1, 0] [1, 1, 1, 1] [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]エラーメッセージ
該当のソースコード
python
sa1 = [0,0,0,0] sa2 = [] def saisa(n): for i in range(2): sa1[n] = i if n < 3: saisa(n+1) else: print(sa1) sa2.append(sa1) saisa(0) print(sa2)
試したこと
簡略版を作ってみました。やはりprint(b)の結果は、1が4つ並ぶ4X4の2次元リストになりますので、リストを追加していくやり方がまずいのだろうな、と考えていますが、では、どうすればいいのかがわかりません。
a = [0,0,0,0,] b = [] for i in range(4): a[i] = 1 print(a) b.append(a) print(b)
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/07 02:15
2020/06/07 02:17
退会済みユーザー
2020/06/07 05:16
2020/06/07 05:18
2020/06/07 06:28
2020/06/07 06:48
2020/06/07 07:32