如何在Python的for循环中动态赋值给不同的变量

例如我想生成很多的变量,a1=1,a2=2,a3=3,a4=4 …
如何在Python的for循环中动态赋值给不同的变量

21 回复

OMG,list 不行?


这个问题其实挺常见的,但Python里直接“动态创建变量名”通常不是好做法,容易让代码难读难维护。不过,如果你确实需要在循环里把值赋给不同的变量,有几种常见的处理方式。

1. 使用字典(推荐) 这是最清晰、最Pythonic的方法。你可以用循环的索引或某个键来动态创建字典的键。

data = ['Alice', 'Bob', 'Charlie']
variables = {}
for i, value in enumerate(data):
    variables[f'var_{i}'] = value
    # 或者 variables[f'person_{i}'] = value

print(variables)  # 输出: {'var_0': 'Alice', 'var_1': 'Bob', 'var_2': 'Charlie'}
print(variables['var_1'])  # 输出: Bob

2. 使用列表 如果变量是顺序的,直接用列表更简单。

data = [10, 20, 30]
results = []
for item in data:
    results.append(item * 2)

print(results)  # 输出: [20, 40, 60]
print(results[1])  # 输出: 40

3. 使用execglobals()(不推荐,但确实能做到) 虽然能实现,但这样写代码很难调试,也有安全风险,除非你完全清楚自己在做什么。

data = ['x', 'y', 'z']
for i, value in enumerate(data):
    globals()[f'dynamic_var_{i}'] = value

print(dynamic_var_0)  # 输出: x

4. 使用namedtupledataclass 如果你的数据有固定结构,用命名元组或数据类会让代码更清晰。

from collections import namedtuple

Person = namedtuple('Person', ['name', 'age'])
people_data = [('Alice', 30), ('Bob', 25)]
people = []
for name, age in people_data:
    people.append(Person(name, age))

for person in people:
    print(f"{person.name}: {person.age}")

总结一下: 大多数情况下,用字典或列表就足够了,代码既安全又容易理解。除非有特殊需求,否则别用exec或直接改globals()

一句话建议:用字典来管理动态变量名,既安全又灵活。

矩阵不行吗,数组不行吗,list 不行吗

可变变量

php<br>&lt;?php<br>for ($i = 1; $i &lt;= 4; $i++) {<br> $k = 'a' . $i;<br> $$k = $i;<br>}<br>var_dump($a1);<br>var_dump($a2);<br>var_dump($a3);<br>var_dump($a4);<br>

python 不懂

意义何在

locals()[‘a1’]=1

可以用 locals() 或者 globals()
但为什么要这么做?你是什么样的需求不能用 list 吗?

我要生成一个配置文件 根据传进来的 list 生成很多配置信息

字典不行吗,和一堆变量用起来没啥区别啊

那用 dict 更好吧

config[“a1”] = 1

<br>name_dict = {}<br>for i in range(1, 5):<br> k = 'a' + str(i)<br> name_dict['%s' % k] = i<br><br>print(name_dict)<br>

输出:

{‘a3’: 3, ‘a1’: 1, ‘a2’: 2, ‘a4’: 4}

//用 map,key 是变量名,value 是实际的值, key 动态生成
for (int i = 0; i < list.size; i++) {
map.put(“a”+1,“实际的值”);
}

大概这样应该可以吧

#12 补充
如需变量名将 name_dict = {} 改为 name_dict = locals()

你把 xx1 xx2 什么的也放到一个 list 里面或者一个 dict 里面

最后生成一个这个


[{
‘id’:1,
‘hosts’: ‘1.1.1.1’,
‘port’: 22222,
‘username’: ‘root’,
‘pwd’: ‘aaaaaaaaaaaaaa’
},
{
‘id’:2,
‘hosts’: ‘2.2.2.2’,
‘username’: ‘root’,
‘pwd’: ‘sssssssssssss’
}]

以前我也有这么个需求,后来发现变量是保存在locals()globals()里的,再后来发现用不着这样做。
locals()globals()也是个字典,直接用字典就好了。

要变量名就 dict,不要就是 list

多谢各位

楼主以前不会是用 LISP 的吧 …

locals()
这个字典里放的是命名的变量。

回到顶部