在Python中动态分配变量

时间:2015-01-27 09:49:06

标签: python arrays loops for-loop numpy

我已将numpy数组初始化为:

import numpy as np
data = np.loadtxt('rand1.csv', delimiter=',', dtype=np.int)

导入后,“数据”如下所示:

array([[422, 858, 129, 312,  79, 371],
       [ 39, 280, 366,  13, 316,  81],
       [929,  49, 909, 734, 635, 779],
       [365, 570, 863, 108, 545, 846],
       [150, 820, 193, 373, 865, 770],
       [486, 547, 759,  56, 413, 470],
       [322, 171, 463, 998, 351,  92],
       [690, 297, 558, 476,  60, 804]])

现在我试图将每个数组项存储在不同的变量中。也就是说,如果我的数组是nxm,那么应该有nm个不同的变量。 我正在使用的代码是:

for x in range(0,8):
    for y in range(0,6):
        str(x)+str(y)=data[x,y] 

但是,它给我一个错误说

  

“SyntaxError:无法分配给运算符”

。 任何人都可以告诉我这里做错了什么,应该怎么做?

2 个答案:

答案 0 :(得分:0)

Python确实是一种动态语言,通过许多努力,您可以找到一种动态创建变量的方法。但请不要尝试:

  • 因为您可以使用语法data [x,y]
  • 访问该值,所以它将毫无用处
  • 在您的代码中的任何其他地方都很难使用,因为您可能并不完全知道这些动态变量的数量。

如果您不想使用numpy数组,可以使用列表列表。但请不要尝试在运行时创建变量,它实际上是一种反模式。

答案 1 :(得分:0)

正如评论和其他答案中所提到的,这是一个糟糕的想法,很可能是一个XY问题。话虽如此, 严格可能:

globals()[str(x)+str(y)] = data[x, y]

这是有效的,因为globals()返回一个dict,它将模块级变量名(存储为字符串)映射到它们各自的对象。您需要使用该词典,否则您将尝试执行以下操作:

'foo' = 'bar'

你不应该期望有效。

正如所写,这是特别脆弱和毫无意义的。您构建的字符串纯数字,因此不是有效的变量名。这意味着你只能通过在globals()中查找它们来找到它们。这可以通过在它们的正面放一个字母或单词来减轻,所以

globals()['data'+str(x)+str(y)] = data[x, y]

然后您可以通过print(data00)访问它们,依此类推。

请不要真的这样做。