【问题标题】:Creating variables in loop and initialize them in Python在循环中创建变量并在 Python 中初始化它们
【发布时间】:2014-12-27 10:01:22
【问题描述】:

我有 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]

【问题讨论】:

  • 在 for 循环中 vari 应该是 var !!?
  • 哦,谢谢,已更正
  • @user3440489 显示你想要的输出。你还不清楚。最好在 for 循环中使用 i+'_true' 删除 k
  • 请注意:最好将它们制成列表或字典或其他结构,而不是使用单独的变量。

标签: python arrays loops


【解决方案1】:

您可以使用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

【讨论】:

    【解决方案2】:

    这里已经讨论过了:

    Using a string variable as a variable name

    特别是,这样的事情应该有效:

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

    【讨论】:

      【解决方案3】:

      您可以尝试使用字典,键是 a_true 等,值是数字。

      dict={}

      dict['a_true']=35

      或者你可以在一个循环中完成整个事情。

      【讨论】:

        【解决方案4】:

        您可以通过字母列表并将每个字母与'_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']
        

        如果您需要将其与所有字母(大写 + 小写)连接起来。

        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”的变量。这不是最好的做法。但是,您可以使用字典。 这是一种使用keys 映射变量以获取values 的方法。

        在这个例子中。 我们添加 '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

        【讨论】:

        • 感谢您的帮助。但是这个变量名数组是使用 for 循环以及使用 append 创建的(虽然这更优雅)。现在,如果我想将这些元素用作变量并像 a_true=45 一样初始化它们怎么办?
        • 为什么你给(-1)所有其他答案。此解决方案解决了问题,但不是最好的。如果你不喜欢它,它应该排名 (0),(-x) 用于真正不相关的解决方案(这不是这个或其他任何一个的情况)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-02
        • 1970-01-01
        • 2011-04-02
        • 1970-01-01
        • 2021-04-01
        • 2011-05-24
        相关资源
        最近更新 更多