0

私がやりたいのは、リストを取得して、他の配列の項目を含む配列を生成することです。これは私が試したものです:

def GenerateArray(pers):
    for item in pers:
        (newtest30 + str(item)) = []
        (newtest60 + str(item)) = []
        (newtest120 + str(item)) = []
        (newtest5min + str(item)) = []
        (newtest10min + str(item)) = []
        (newtest15min + str(item)) = []
        (newtest20min + str(item)) = []
        (newtest25min + str(item)) = []
        (newtest30min + str(item)) = []
        (newtest35min + str(item)) = []
        (newtest40min + str(item)) = []
        (newtest45min + str(item)) = []
        (newtest50min + str(item)) = []
        (newtest55min + str(item)) = []
        (newtest60min + str(item)) = []

たとえば、このようなリストの場合、list = [1,2,3,4,5,6,7]名前付きの配列を生成します

newtest301
newtest302
newtest303
etc

上記のコードは機能しないので、どうすればよいですか?

4

2 に答える 2

2

変数名を動的に作成することは、維持するのが非常に困難です。(現在)Cpythonで可能であり(他の実装では動作が異なる場合があります)、Cpythonで常に動作することが保証されているわけではありません。言い換えれば...これを行うことは悪いアイデアです。しかし、あなたがしなければならない場合:

globals()['a']='foo'
print(a)   #prints foo

これを行うためのはるかに良い方法は、辞書を使用することです。

def GenerateArray(pers):
    d={}
    for item in pers:
        d['newtest30' + str(item)] = []

    return d

次に、次の方法でリストにアクセスできます。

d=GenerateArray([1,2,3])
test301=d['newtest301']

これには、動的に名前を付けた場合よりもはるかに簡単にテストを繰り返すことができるという利点があります。(たとえば、作成したnewtestの数をどのようにして知ることができますか?)

于 2012-07-12T14:49:51.630 に答える
0

あなたは確かに動的に名前が付けられた変数を望んでいません:それは間違いなく悪い考えです(tm)

あなたができることは次のdictようなものを使用することです:

from itertools import product

def generate_arrays(pers):
    blah = [
        'newtest30',
        'newtest60'
        # etc...
    ]
    my_dict = dict( ('{}{}'.format(a, b), list()) for a, b in product(blah, pers) )
    return my_dict

しかし、これを実行していることに気付いた場合は、おそらく設計上の欠陥です。

于 2012-07-12T14:54:36.260 に答える