繁体   English   中英

使用循环将值分配给列表中的变量

[英]Assigning values to variables in a list using a loop

var_list = [one, two, three]
num = 1
for var in var_list:
    var = num
    num += 1

上面给出了一个“一”不存在的错误。 你不能这样分配吗? 我想为列表中的每个var分配一个递增的数字。

您可以使用globals()内置函数访问全局变量的字典。 字典使用字符串作为键,这意味着,您可以在运行时创建名称为字符串的变量,如下所示:

>>> var_names = ["one", "two", "three"]
>>> count = 1
>>> for name in var_names:
...  globals()[name] = count
...  count += 1
... 
>>> one
1
>>> two
2
>>> three
3
>>> globals()[raw_input()] = 42
answer
>>> answer
42

推荐阅读

Python变量是值的名称 它们并不真正“包含”这些价值观。

for var in var_list:使'var'成为列表中每个元素的名称。 在循环内部, var = num不会影响列表:相反,它会导致var不再是list元素的名称,而是开始成为当前任何num名称的名称。

类似地,当您创建列表时,如果onetwothree不是值的名称,那么您不能像这样使用它们,因为您要求创建具有这些名称的值的列表(然后导致var_list成为该列表的名称)。 请注意,列表实际上并不包含值:它引用,即共享它们。

不,它不会那样工作。

你可以试试:

one, two, three = range(1, 4)

这项工作通过在多个赋值中定义变量。 就像你可以使用a, b = 1, 2 这将展开range并将其值分配给LHS变量,因此它看起来像您的循环(除了它有效)。

另一个选项(我不建议在实际程序中......)将在exec语句中引入变量名:

names = ['one', 'two', 'three']
num = 1
for name in names:
    exec "%s = %s" % (name, num)
    num += 1
print one, two, three                  

在创建变量之前,该变量不存在。 简单地引用变量不足以创建变量。 当你这样做[one, two, three]你引用的变量onetwothree创建它们之前。

我认为这种方法更简单。

var_list = [1, 2, 3]
num = 1
for index,var in enumerate(var_list):
    var_list[index] = num
    num += 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM