在Python中循环创建并初始化变量

5 投票
4 回答
11766 浏览
提问于 2025-04-30 19:46

我有10个参数需要初始化。按照约定,它们的命名方式是a_true、b_true等等。它们不是一个列表或数组,而是独立的变量。需要从一个长度为1x10的数组中进行初始化。

我打算这样做,虽然我知道这样做有一些缺点:

param=[34,65,...,234] # Contains initialization values
var=['a','b','c','d','e','f','g','h','i','j']
gvalues=[] # Array intended to contain variable names
k=0
for i in var:
    gvalues.append(var[k]+'_true')
    k+=1

这样会创建一个包含a_true、b_true等的元素的数组。我想把它们当作变量,而不是数组中的元素,最后用param中的值来初始化它们。有没有什么办法?如果这看起来很简单,我为自己是个新手而感到抱歉。

预期输出:

[a_true, b_true, ..., j_true]=[34, 65, ... , 234]
暂无标签

4 个回答

-1

你可以遍历字母列表,把每个字母后面加上'_true'。

import string

gvalues =[x+'_true' for x in string.ascii_lowercase]
print gvalues

输出结果是:

['a_true', 'b_true', 'c_true', 'd_true', 'e_true', 'f_true', 'g_true', 'h_true', 'i_true', 'j_true', 'k_true', 'l_true', 'm_true', 'n_true', 'o_true', 'p_true', 'q_true', 'r_true', 's_true', 't_true', 'u_true', 'v_true', 'w_true', 'x_true', 'y_true', 'z_true']

如果你需要把所有字母(大写和小写)都加上'_true',

import string

gvalues =[x+'_true' for x in string.ascii_letters]
print gvalues

那么结果会是:

['a_true', 'b_true', 'c_true', 'd_true', 'e_true', 'f_true', 'g_true', 'h_true', 'i_true', 'j_true', 'k_true', 'l_true', 'm_true', 'n_true', 'o_true', 'p_true', 'q_true', 'r_true', 's_true', 't_true', 'u_true', 'v_true', 'w_true', 'x_true', 'y_true', 'z_true', 'A_true', 'B_true', 'C_true', 'D_true', 'E_true', 'F_true', 'G_true', 'H_true', 'I_true', 'J_true', 'K_true', 'L_true', 'M_true', 'N_true', 'O_true', 'P_true', 'Q_true', 'R_true', 'S_true', 'T_true', 'U_true', 'V_true', 'W_true', 'X_true', 'Y_true', 'Z_true']

更新

如果你想创建一个名为'a_true'的变量,这样做并不是最好的选择。不过,你可以使用字典。字典是一种通过来获取的方式。

在这个例子中,我们把'a_true'作为一个键,以便获取一个值。

d= {'a_true':1, 'b_true':2, 'c_true':3, 'd_true':3}

print d['a_true']

这会给你:1

print d['b_true']

这会给你:2

0

你可以试着用一个字典,字典里的键可以是像 a_true 这样的名字,而对应的值就是数字。

比如,你可以这样创建一个字典:

dict={}

然后你可以给字典添加一个键值对,像这样:

dict['a_true']=35

等等。

或者你也可以用一个循环来完成整个过程。

2

这里已经讨论过这个问题:

使用字符串变量作为变量名

特别是,像这样的代码应该可以正常工作:

for k, v in zip(gvalues, params):
    exec('%s = %s' % (k, v))
5

你可以使用 locals()globals() 来动态地给变量赋值。

>>> param = range(10)
>>> var = 'abcdefghij'
>>> locals().update({'{}_true'.format(k): v for k, v in zip(var, param)})
>>> c_true
2
>>> f_true
5

撰写回答