19

ループを使用して変数に名前を付けるにはどうすればよいですか? たとえば、変数 を から までずっと持ちたい場合、double_1 = 2どのように記述すればよいでしょうか?double_2 = 4double_12 = 24

私はそれが次のようなものになると感じています:

for x in range(1, 13):
    double_x = x * 2 
    # I want the x in double_x to count up, e.g double_1, double_2, double_3

明らかに、これは機能しませんが、変数名にループされた数値を実装するための正しい構文は何でしょうか? しばらくコーディングしていませんでしたが、これを行う方法があったことを覚えています。

4

5 に答える 5

44

代わりに辞書を使用してください。例えば:

doubles = dict()

for x in range(1, 13):
    doubles[x] = x * 2

または、絶対 にこれを行う必要があり、かつ、自分がしていることを完全に理解している場合にのみlocals()、辞書に as を割り当てることができます。

>>> for x in range(1, 13):
...     locals()['double_{0}'.format(x)] = x * 2
... 
>>> double_3
6

ただし、これを行う理由は決してありません。代わりに辞書を使用する必要があるためです。

于 2012-11-28T10:49:08.753 に答える
7

私のコメントを拡張する:「dictを使用してください。それがまさにそれらが作成された理由です」

defaultdictを使用:

>>> from collections import defaultdict
>>> d = defaultdict(int)

通常のdictを使用:

>>> d = {}

残り:

>>> for x in range(1, 13):
    d['double_%02d' % x] = x * 2


>>> for key, value in sorted(d.items()):
    print key, value


double_01 2
double_02 4
double_03 6
double_04 8
double_05 10
double_06 12
double_07 14
double_08 16
double_09 18
double_10 20
double_11 22
double_12 24
于 2012-11-28T10:49:50.553 に答える
6

あなたが本当にやりたいことをする必要があるとは思えませんが、ここに方法があります:

namespace = globals()
for x in range(1, 13):
    namespace['double_%d' % x] = x * 2

print double_1
print double_2
   ...
print double_12

globals()現在のグローバル シンボル テーブルを表す辞書 (現在のモジュールの辞書) を返します。ご覧のとおり、任意のエントリを追加できます。

于 2012-11-28T11:56:43.413 に答える
2

すでに述べたように、辞書を使用する必要があります。要件を満たすものを簡単に作成する方法を次に示します。

>>> {k:k*2 for k in range(1,13)}
{1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18, 10: 20, 11: 22, 12: 24}
于 2012-11-28T10:53:47.120 に答える
1

dict は、要件に合わない場合でも使用できます。しかし、それがあなたを助けることを願っています。

var_dic = {}
for x in range(1, 13):
    var_dic["double_%s"% str(x)] = x * 2
print var_dic
于 2012-11-28T10:51:14.110 に答える