前提・実現したいこと
Pythonでローカルスコープ内でグローバル変数の代入を実施したいと思っています。
しかし、Pythonではグローバル領域でグローバル変数として宣言しても、ローカルスコープ内で代入を行うとローカル変数として扱われるという特徴があるため実装できずにいます。
発生している問題・エラーメッセージ
今回は例として、
配列A、Bをもとに以下のようなリストを作成して出力するプログラムを作成することとします。
【出力したいリスト】
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]
そのために、今回は以下のようなプログラムをかきました。
(実際は配列A,Bの値を使用するプログラムですが今回は例なのでまったく無意味なプログラムです)
Python
1 2A = [0, 1, 2, 3, 4, 5] 3B = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 4 5row = [] 6array = [] 7 8counter = 0 9 10for a in A: 11 row = [] 12 13 #1 14 counter = 0 15 16 #2 17 for b in B: 18 row.append(counter) 19 counter += 1 20 21 array.append(row) 22
やってほしい動作としては、#2の「for b in B」内でcounter変数が1ずつ足されていくという動作です。しかし、どうやら#1の時点でcounter変数に代入をしているのでローカル変数と認識されてしまい、毎回counter変数の値が0となるようです。
そのため、毎回counterには0が代入され、配列は[0, 0, 0, ・・・]となります。
しかし、#1でリセットをかけないと希望する出力の2行目が[11, 12, 13, 14, ・・・]となってしまうため、どのようにすればこれを回避できるか教えていただけませんでしょうか。
試したこと
各グローバル変数の値をリセットする関数を定義し、ローカルスコープ内から呼び出しを実施することもやりましたが結果は変わりませんでした。
また、ローカルスコープ内で代入操作を行わないと希望通りカウンターが足されていきました。しかし希望する出力は、行が変わるごとに0からスタートする動作ですのでこの動作は実装できませんでした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/23 12:17