0

我正在尝试在 python 中执行以下操作:我有一个包含一些字符串值的列表。该列表如下所示:

       parameters =  ['RH', 'WindSp_Avg', 'WindDir']

我想做的——我真的希望这个问题不是荒谬的——是创建三个列表,每个列表都有“参数”列表的名称。例如:

         RH = []
         WindSp_Avg = []
         WindDir = []

我是 python 新手,虽然我在网上搜索了一下,但找不到一些优雅的方法来做这样的事情。

我正在尝试这样的事情:

    for i in parameters:

        parameters[0] = []

但这似乎不起作用。有什么建议么?

谢谢迪米特里斯

4

4 回答 4

9

您正在尝试做的事情非常不安全,并且违反了所有良好做法。简单地创建字典有问题吗?

myVars = {}
for param in parameters:
    myVars[param] = []

警告以下代码用于教育目的!不要在真实代码中使用它!

您可以做一个硬破解来动态地将变量添加到函数内的局部变量中。通常locals()表示所有局部变量。然而,简单地添加到该字典并不能解决问题。有一个 hack 可以强制 Python 使用 重新评估本地人exec,例如:

def test():
    for param im parameters:
        locals()[param] = []
    exec ""
    print WindSp_Avg

结果:

>>> test()
[]
于 2013-04-05T09:56:25.443 回答
1
parameters = ['RH', 'WindSp_Avg', 'WindDir']
for i in parameters:
    vars()[i] = [];
print locals()
于 2013-04-05T10:06:03.317 回答
0

要创建变量,您可以这样做:

parameters =  ['RH', 'WindSp_Avg', 'WindDir']
for i in parameters:
    exec("%s = []" % i);

print vars()
于 2013-04-05T10:04:10.803 回答
0

你可以这样:

code = "{0} = []"
for i in parameters:
    codeobj = compile(code.format(i), "/dev/null", "single")
    eval(codeobj)

但我认为这很不安全。因为它可能是参数中的某些内容,并且将由 eval 执行。因此,请仅在真正必要且安全性不太重要时才使用它。

于 2013-04-05T10:09:12.147 回答