var_list = [one, two, three]
num = 1
for var in var_list:
var = num
num += 1
上面给出了一个“一”不存在的错误。你不能这样分配吗?我想为列表中的每个var分配一个递增的数字。
答案 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
答案 1 :(得分:8)
Python变量是值的名称。他们并没有真正“包含”这些价值观。
for var in var_list:
导致'var'成为列表中每个元素的名称。在循环内部,var = num
不会影响列表:相反,它会导致var
不再是列表元素的名称,而是开始成为当前名称num
的名称
同样,当您创建列表时,如果one
,two
和three
不是值的名称,则您不能像这样使用它们,因为您是要求创建具有这些名称的值的列表(然后使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]
后,您在创建变量之前引用变量one
,two
和three
。
答案 4 :(得分:0)
我认为这种方法更简单。
var_list = [1, 2, 3]
num = 1
for index,var in enumerate(var_list):
var_list[index] = num
num += 1