Usando un bucle en Python para nombrar variables

¿Cómo uso un bucle para nombrar variables? Por ejemplo, si quisiera tener una variable double_1 = 2 , double_2 = 4 hasta double_12 = 24 , ¿cómo lo escribiría? Me da la sensación de que sería algo como esto:

for x in range(1, 13): double_x = x * 2 #I want the x in double_x to count up, eg double_1, double_2, double_3 

Obviamente, esto no funciona, pero ¿cuál sería la syntax correcta para implementar el número en bucle en el nombre de la variable? No he codificado por un tiempo, pero sí recuerdo que había una manera de hacer esto.

Utilice un diccionario en su lugar. P.ej:

 doubles = dict() for x in range(1, 13): doubles[x] = x * 2 

O si es absolutamente necesario hacerlo Y SOLO SI ENTIENDES COMPLETAMENTE LO QUE ESTÁS HACIENDO , puedes asignarlo a los locals() como a un diccionario:

 >>> for x in range(1, 13): ... locals()['double_{0}'.format(x)] = x * 2 ... >>> double_3 6 

Sin embargo, nunca debería haber una razón para hacer esto, ¡ya que debería usar el diccionario en su lugar!

ampliando mi comentario: “usar un dict. es exactamente por qué fueron creados”

usando defaultdict:

 >>> from collections import defaultdict >>> d = defaultdict(int) 

usando el dict normal

 >>> d = {} 

el rest:

 >>> for x in range(1, 13): d['double_%02d' % x] = x * 2 >>> for key, value in sorted(d.items()): print key, value double_01 2 double_02 4 double_03 6 double_04 8 double_05 10 double_06 12 double_07 14 double_08 16 double_09 18 double_10 20 double_11 22 double_12 24 

Aunque dudo que realmente necesites hacer lo que quieres, aquí hay una manera:

 namespace = globals() for x in range(1, 13): namespace['double_%d' % x] = x * 2 print double_1 print double_2 ... print double_12 

globals() devuelve un diccionario que representa la tabla de símbolos global actual (el diccionario del módulo actual). Como puede ver, es posible agregarle entradas arbitrarias.

Puede utilizar el dict, mientras que no se ajuste a sus necesidades. Pero espero que te pueda ayudar.

 var_dic = {} for x in range(1, 13): var_dic["double_%s"% str(x)] = x * 2 print var_dic 

Como ya se mencionó, debes usar un dict. Esta es una buena manera fácil de crear una que cumpla con sus requisitos.

 >>> {k:k*2 for k in range(1,13)} {1: 2, 2: 4, 3: 6, 4: 8, 5: 10, 6: 12, 7: 14, 8: 16, 9: 18, 10: 20, 11: 22, 12: 24}