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']

这样做的好处是,与动态命名它们相比,它允许您更轻松地迭代您的测试。(例如,你怎么知道你创建了多少新测试?)

于 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 回答