Python中的空变量列表

时间:2018-10-23 10:50:25

标签: python

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

赞:

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

>>>[0, 0, 0]

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

编辑:由于您询问了具体问题,因此请按以下步骤进行:

我有一个看起来像这样的熊猫系列(请问瑞典人):

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

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

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

förbKVVptp, förbKVVsflis, förbKVVåflis = Elanv.iloc[0], Elanv.iloc[1], Elanv.iloc[2] .... 

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

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]

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

3 个答案:

答案 0 :(得分:4)

您无法在python中创建未初始化的变量。 Python实际上并没有变量,它具有引用值的名称。未初始化的变量将是不引用值的名称-因此基本上只是一个字符串:

varList = ['förbKVVptp', 'förbKVVsflis', 'förbKVVåflis']

您可以通过将它们与值相关联将它们转换为变量。其中一种方法是通过globals

for i, varname in enumerate(varList):
    globals()[varname] = Elanv.iloc[i]

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

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

另请参阅How do I create a variable number of variables?

答案 1 :(得分:1)

  • 您的问题的答案是列表中不能包含未定义的变量。
  • 我的解决方案特定于解决问题的这一部分 我要问的原因是我有一个项目,假设可以通过遍历Pandas数组来批量填充100个以上的数组。
  • 下面的解决方案用<xsl:apply-templates select="document('other.xml')"/>预填充列表,然后您可以更改列表中的值。

代码:

None

输出:
varList = [None]*3 for i in range(len(varList)): varList[i] = 0 print(varList)

答案 2 :(得分:-2)

因此,您在示例中尝试做的事情并没有达到您的期望,这就是您尝试修改列表的方式:

for var in varList:
    var = 0

执行var = 0时,它不会更改列表,也不会更改varA,varB,varC的值(如果已定义)。

类似地,以下内容不会更改列表的值。只会更改var的值。

var = mylist[0]
var = 1

要更改列表的值,您需要对列表中的索引项目执行赋值表达式:

mylist = [None, None, None]
for i in range(len(mylist)):
    mylist[i] = 0

print(mylist)

请注意,通过在分配值之前创建带有空插槽的列表是无效的,而不是pythonic。更好的方法是只遍历源值,然后将它们附加到列表中,或者甚至更好地使用list comprehension