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

时间:2011-01-14 02:12:07

标签: python list variables loops

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

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

5 个答案:

答案 0 :(得分:11)

您可以使用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

Recommended reading

答案 1 :(得分:8)

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

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

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

答案 2 :(得分:4)

不,它不会那样。

您可以尝试:

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                  

答案 3 :(得分:3)

在您创建变量之前,该变量不存在。简单地引用变量不足以创建变量。执行[one, two, three]后,您在创建变量之前引用变量onetwothree

答案 4 :(得分:0)

我认为这种方法更简单。

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