Estoy tratando de aprender python y haciendo pequeños ejercicios tontos, pero me ayudan muchísimo. El ejercicio actual me hace escribir un programa que crea un diccionario con los días de la semana con el número correspondiente como clave:

1: lunes
2: martes
...

Esto es lo que tengo hasta ahora:

dayNumber = [1,2,3,4,5,6,7]  
dayName = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]  
week = {}  
for n in dayNumber:  
    week[dayNumber[n]] = dayName[n]  

Sin embargo, cuando ejecuto el programa, la primera entrada en la lista es 2: martes. Puedo hacer que funcione cambiando:

dayNumber = [0,1,2,3,4,5,6]
for n in dayNumber:  
    week[dayNumber[n]+1] = dayName[n]

Pero esta no parece ser la forma correcta de manejar esto. Que esta pasando...

Gracias por la ayuda

0
jawohl 18 mar. 2017 a las 15:19

2 respuestas

La mejor respuesta

Las listas en Python comienzan en cero, por lo que dayname[1] es 'martes' no Monday

En ambos fragmentos de código no necesita daynumber[n]: ya tiene el número de la lista en su variable n. Un bucle for le da el valor de su lista, no el índice en su lista.

Esto debería funcionar :

dayNumber = [1,2,3,4,5,6,7]  
dayName = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]  
week = {}  
for n in dayNumber:  
    week[n] = dayName[n-1]

O mejor

dayNumber = [1,2,3,4,5,6,7]  
dayName = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] 
week = dict(zip(dayNumber, dayName))  

Para listas grandes (1000 entradas), zip parece casi el doble de rápido que el ingenuo para la versión en bucle, probablemente porque zip está escrito en C.

1
Tony Suffolk 66 18 mar. 2017 a las 14:48

La lista de Python es un índice basado en 0, es decir, el primer elemento de la lista está presente en la posición "0", lista [0]

puede reemplazar week[dayNumber[n]] = dayName[n] con week[n] = dayName[n-1]

dayNumber = [1,2,3,4,5,6,7]  
dayName = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", 
"Saturday", "Sunday"]  
week = {}  
for n in dayNumber:  
    week[n] = dayName[n-1]  
0
Tony Suffolk 66 18 mar. 2017 a las 12:41