Asignar valores a variables en una lista usando un bucle

var_list = [one, two, three] num = 1 for var in var_list: var = num num += 1 

Lo anterior me da un error de que ‘uno’ no existe. ¿No puedes asignar de esta manera? Quiero asignar un número creciente para cada var en la lista.

Las variables de Python son nombres para valores. Realmente no “contienen” los valores.

for var in var_list: , ‘var’ se convierte en un nombre para cada elemento de la lista. Dentro del bucle, var = num no afecta a la lista: en cambio, hace que var deje de ser un nombre para el elemento de la lista, y en su lugar comienza a ser un nombre para cualquier num nombres actualmente.

De manera similar, cuando creas la lista, si one , two y three no son ya nombres de valores, entonces no puedes usarlos así porque estás pidiendo crear una lista de los valores que tienen esos nombres (y luego causa que var_list sea ​​un nombre para esa lista). Tenga en cuenta que la lista tampoco contiene los valores: hace referencia, es decir, los comparte.

Puede acceder al diccionario de variables globales con la función incorporada globals() . El diccionario usa cadenas para las claves, lo que significa que puede crear variables con nombres dados como cadenas en tiempo de ejecución, como esto:

 >>> var_names = ["one", "two", "three"] >>> count = 1 >>> for name in var_names: ... globals()[name] = count ... count += 1 ... >>> one 1 >>> two 2 >>> three 3 >>> globals()[raw_input()] = 42 answer >>> answer 42 

Lectura recomendada

No, no funciona así.

Puedes probar:

 one, two, three = range(1, 4) 

Esto funciona definiendo las variables en una asignación múltiple. Así como puedes usar a, b = 1, 2 . Esto desenrollará el range y asignará sus valores a las variables de LHS, para que se vea como su bucle (excepto que funciona).

Otra opción (que no recomendaría en un progtwig real …) sería introducir los nombres de las variables en una sentencia exec:

 names = ['one', 'two', 'three'] num = 1 for name in names: exec "%s = %s" % (name, num) num += 1 print one, two, three 

Una variable no existe hasta que la creas. Simplemente hacer referencia a una variable no es suficiente para crearla. Cuando haces [one, two, three] estás haciendo referencia a las variables one , two y three antes de crearlas.

Creo que este enfoque es más sencillo.

 var_list = [1, 2, 3] num = 1 for index,var in enumerate(var_list): var_list[index] = num num += 1