在Python中循环创建并初始化变量
我有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))