質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

8回答

5676閲覧

動的に変数(変数名)を定義したい。

muuu4649

総合スコア11

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2018/08/10 04:46

動的に変数(変数名)を定義したいです。
具体的に下記の感じでやりたいですがエラーが出ます。

for i in range (1,30):
for j in range (1,30):
i +"_"+ j = 0

(例えば、1_1,1_2,,,,,を定義し、0を代入したい)

何か案があれば宜しく御願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答8

0

大抵の場合、そう言う事をしたいと思った考えが間違っています。
なぜ、そんな事をしたいと思ったのでしょうか?

投稿2018/08/10 04:49

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maxtaq

2019/10/27 04:34

そういう突き放した答え方こそ間違っています。なぜ間違っているんですか?
otn

2019/10/27 13:32

> なぜ間違っているんですか? 「なぜそんなことをしたいと思ったのか」を聞いてみないとわかりません。 突き放しているわけじゃなくて、質問者の「根本的な課題」を聞き出して、よりよい解決法に導こうとしています。 「Aをしたい」→「そのためにはBをすればいいんだろう」→「質問:Bをするにはどうしたらいいですか?」 という思考過程のA→Bの部分がおそらく間違っているわけです。最初から「質問:Aをするにはどうすればいですか?」と聞いてくれればいいのに。
guest

0

そもそも数字始まりの文字列は変数名には使えません。その変数を作ってどんなことがしたいか、もう少し説明を付け加えてもらえないでしょうか。

投稿2018/08/10 04:52

tachikoma

総合スコア3601

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

数字から始められないのでvつけましたv1_1からv29_29まで

python

1for i in range(1,30): 2 for j in range(1,30): 3 t="v{0}_{1}=0".format(i,j) 4 exec(t)

投稿2018/08/10 06:32

tmp

総合スコア277

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

名前の頭にarrayを付けています。

python

1class Hoge: 2 pass 3 4for i in range (1, 30): 5 for j in range (1, 30): 6 setattr(Hoge, "array" + str(i) + "_" + str(j), i * 100 + j) 7 8hoge = Hoge() 9print(hoge.array1_1, hoge.array1_29, hoge.array29_1, hoge.array29_29) 10# 101 129 2901 2929

投稿2018/08/10 05:40

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

リストのリストを使ってください。

Python

1list[1][2] = 0

投稿2018/08/10 04:54

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

要望する機能はあらかじめi×jのarrayを作っておき、iとjをインデックスにして値を設定したりアクセスする方法がいいかと思います

投稿2018/08/10 05:23

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

変数名ではありませんが、識別子がほしいのなら辞書を使うとよさそうです。

python

1d = dict() 2for i in range (1,30): 3 for j in range (1,30): 4 d["{0}_{1}".format(i, j)] = 0 5

投稿2018/08/10 06:01

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

muuu4649

2018/08/10 06:49

解答ありがとうございます。また、前回もありがとうございました。 ここで、質問なのですが、この宣言した辞書(識別子)それぞれ新たに1を足す場合、どうすればよろしいでしょうか?お時間があれば宜しくお願いします。現在、自分で試行していますが、うまく行きません。。。
hayataka2049

2018/08/10 06:58

d["0_0"]+=1のようにするのではだめですか?
muuu4649

2018/08/10 07:15

できれば、後に、for文で iと j 用いてそれぞれ+1したいです。説明が少なくて申し訳ありません。。
fuzzball

2018/08/10 07:43

値を入れるときと同じように d["{0}_{1}".format(i, j)] += 1 とすればいいです。 ただ、このような使い方をするなら Zuishinさんの回答のようにリストを使った方がいいと思います。
muuu4649

2018/08/10 07:52

なるほど。とても勉強になりました。自分でも深く勉強したいと思います。
hayataka2049

2018/08/10 08:57

>fuzzballさん 私のかわりにコメントしていただきありがとうございます。 リストの件について、同感です。単に数字のインデックスでアクセスしたいのならリストやnumpy配列ですね。
guest

0

質問の内容が、otnさんの回答に該当しないならば、リフレクションという方法があります。
リフレクションは少し高度な内容で、一般的なプログラミングで必要とされるケースは少ないです。

https://qiita.com/icoxfog417/items/bf04966d4e9706eb9e04

投稿2018/08/10 04:56

middle

総合スコア28

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2018/08/10 05:05

リフレクションで変数名を増やすことができるのですか?
middle

2018/08/10 05:48

はい。変数名や関数名を動的に生成する、それがリフレクションです。 Effective Pythonとか、入門書よりもワンランク上の本に書かれている内容です。
Zuishin

2018/08/10 05:52

ありがとうございます。 リンク先の情報はそれとは少し違うようなので、適切な情報を引用されたら良いのではないかと思います。
middle

2018/08/10 06:02

イライラさせる物言いですねえ笑 自分が理解できないのを他人のせいにするのは良くない行為なのですよ。 変数を動的に生成したいのですよね? 上のqiitaのページの内容が理解できれば、Zuishinさんがやりたいことはできますよ。 あなたがやりたいことを一般化すると、「動的にインスタンスを生成したい」です。
Zuishin

2018/08/10 06:07

私は別にやりたくありませんし、動的にインスタンスを作成するのとリフレクションは同じものではありません。
middle

2018/08/10 06:13

やけに偉そうな質問者だなあ、と思ったらZuishinさんって質問者さんじゃなかったんですね。 最初に帰結しますが、リフレクションで変数を生成することはできますよ。
Zuishin

2018/08/10 06:41

リンク先にその方法が書いてないので、書いてあるものと差し替えられたらどうですか? もしくは自分でコードを書かれてもいいと思います。
muuu4649

2018/08/10 06:52

質問者です。ご回答ありがとうございます。リフレクションという方法を初めて聞きました。自分でも調べてプログラムを組んでみようと思います。
raccy

2018/08/10 13:39

> 最初に帰結しますが、リフレクションで変数を生成することはできますよ。 ここでの「変数」は「ローカル変数」の事で良いでしょうか?手元のPython 3.7ではどうしても出来なったので、私の知識が不足していてやり方が悪いだけなのか、そもそも「ローカル変数」の事ではないのか、知りたいので教えてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問