从数组创建命名变量

时间:2016-09-01 13:28:56

标签: python arrays list

我有几个数组:

foo_1 = [URL, 2, 30]
foo_2 = [URL, 4, 1230]
foo_3 = [URL, 11, 980]
foo_4 = [URL, 6, 316]

...我想创建一个创建变量的函数,并将其重命名为:

foo_1Count = foo_1[2]
foo_2Count = foo_2[2]
foo_3Count = foo_3[2]
foo_4Count = foo_4[2]

我正在处理一组非常大的数组,因此逐个创建变量并不容易。如果我可以提供帮助,我不想使用字典。有没有办法使用.format()创建变量名称或简单的我缺少的东西?谢谢!

3 个答案:

答案 0 :(得分:1)

如果您要问如何重命名(了解此操作,例如创建新变量并删除现有旧变量),您可以像这样操纵globals

if __name__ == "__main__":
    URL = 'www.abc.com'

    foo_1 = [URL, 2, 30]
    foo_2 = [URL, 4, 1230]
    foo_3 = [URL, 11, 980]
    foo_4 = [URL, 6, 316]

    for i in range(4):
        old_name = 'foo_{}'.format(i + 1)
        new_name = 'foo_{}Count'.format(i + 1)
        globals()[new_name] = globals()[old_name][2]
        del globals()[old_name]

    print globals()

现在,我强烈建议你不要这样做!不要手动搞乱全局变量......相反,如果你的变量有类似的结构,通常没有任何理由单独声明它们,你可以像这样包装它们:

URL = 'www.abc.com'

foos = [
    [URL, 2, 30],
    [URL, 4, 1230],
    [URL, 11, 980],
    [URL, 6, 316]
]

foo_counts = [foo[2] for foo in foos]
print foo_counts

这样,你可以很好地迭代你的数据而不需要像搞乱全局变量这样的廉价技巧。

答案 1 :(得分:0)

URL = 'www.abc.com'

foo_1 = [URL, 2, 30]
foo_2 = [URL, 4, 1230]
foo_3 = [URL, 11, 980]
foo_4 = [URL, 6, 316]

for i in range(4):
        globals()['foo_{}Count'.format(i+1)] = globals()['foo_{}'.format(i+1)][2]

print foo_4Count    # 316

答案 2 :(得分:0)

动态创建变量通常不是一个好主意。相反,您可以直接从聚合列表对象中获取属性。它甚至比foo_1Count更短:

>>> foo_1 = ["URL", 2, 30]
>>> foo_1[2]
30

但你可能不想记住哪个指数是计数。或者,创建一个函数:

>>> def count(foo):
...     return foo[2]
... 
>>> count(foo_1)
30

或者制作foo个对象词典:

>>> foo_1 = {"url": "URL", "whatever": 2, "count": 30}
>>> foo_1["count"]
30

或使用collections.namedtuple使其更清洁:

>>> Foo = collections.namedtuple("Foo", ["url", "whatever", "count"])
>>> foo_1 = Foo("URL", 2, 30)
>>> foo_1.count
30