Python 中的空变量列表

Dan*_*ätt 1 python

是否有可能创建尚未定义的变量/名称* 列表,然后在稍后阶段遍历列表以定义它们?

像这样:

varList = [varA, varB, varC]
for var in varList:
    var = 0
print(varList)

>>>[0, 0, 0]
Run Code Online (Sandbox Code Playgroud)

我问的原因是因为我有一个项目,假设我可以通过循环遍历 Pandas 系列 * 以这种方式批量填充 40 多个变量/名称*。不幸的是,Python 似乎不允许在列表中使用未定义的变量。有没有人有创造性的解决方法?

编辑:既然你问了具体的问题,这里是:

我有一个看起来像这样的 Pandas 系列(请原谅瑞典人):

print(Elanv)

>>>
Förb. KVV PTP                 5653,021978
Förb. KVV Skogsflis                     0
Förb. KVV Återvinningsflis    337,1416119
Förb. KVV Eo1                         6,1
Förb. HVC Återvinningsflis           1848
Name: Elanv, dtype: object
Run Code Online (Sandbox Code Playgroud)

我想将这个数组中的每个值存储到一组新的变量/名称*,我想要控制的名称。例如,我希望包含第一个值的新变量/名称* 被称为“förbKVVptp”,第二个被称为“förbKVVsflis”,依此类推。

“正常”选项是手动分配每个变量,如下所示:

förbKVVptp, förbKVVsflis, förbKVVåflis = Elanv.iloc[0], Elanv.iloc[1], Elanv.iloc[2] .... 
Run Code Online (Sandbox Code Playgroud)

但这会创建一个看起来不太好看的长串代码,只是为了命名变量/名称*。相反,我认为我可以做这样的事情(显然使用所有变量/名称*,而不仅仅是前三个),看起来和感觉更干净:

varList = [förbKVVptp, förbKVVsflis, förbKVVåflis]
for i, var in enumerate(varList): var = Elanv.iloc[i]

print(varList)

>>>[5653,021978, 0, 337,1416119]
Run Code Online (Sandbox Code Playgroud)

显然,如果我必须将新变量/名称* 的名称写两次(首先定义它们,然后将它们放入 varList),这将变得毫无意义,这就是我问的原因。

Ara*_*Fey 5

您不能在 python 中创建未初始化的变量。Python 并没有真正的变量,它有引用值的名称。未初始化的变量将是一个不引用值的名称 - 所以基本上只是一个字符串:

varList = ['förbKVVptp', 'förbKVVsflis', 'förbKVVåflis']
Run Code Online (Sandbox Code Playgroud)

您可以通过将这些字符串与一个值相关联来将它们转换为变量。一种方法是通过globals

for i, varname in enumerate(varList):
    globals()[varname] = Elanv.iloc[i]
Run Code Online (Sandbox Code Playgroud)

但是,像这样动态创建变量通常是一种代码异味。考虑将值存储在字典或列表中:

my_vars_dict = {
    'förbKVVptp': Elanv.iloc[0],
    'förbKVVsflis': Elanv.iloc[1],
    'förbKVVåflis': Elanv.iloc[2]
}

my_vars_list = [Elanv.iloc[0], Elanv.iloc[1], Elanv.iloc[2]]
Run Code Online (Sandbox Code Playgroud)

另请参阅如何创建可变数量的变量?.