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

joh*_*s85 10 python variables loops list

var_list = [one, two, three]
num = 1
for var in var_list:
    var = num
    num += 1
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ius 14

您可以使用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
Run Code Online (Sandbox Code Playgroud)

推荐阅读


Kar*_*tel 9

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

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

同样,当你创建列表,如果one,twothree不是已经为值的名字,那么你可以不使用它们一样,因为你问到创建具有这些名称(进而导致值的列表var_list是该名单的名称).请注意,列表实际上并不包含值:它引用,即共享它们.


Try*_*yPy 5

不,它不是那样工作的。

你可以试试:

one, two, three = range(1, 4)
Run Code Online (Sandbox Code Playgroud)

通过在多个分配中定义变量来完成这项工作。就像您可以使用一样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                  
Run Code Online (Sandbox Code Playgroud)


Bry*_*ley 5

变量在创建之前并不存在。仅仅引用变量不足以创建它。当您这样做时,您是在创建[one, two, three]变量之前引用它们。onetwothree