Inicio > Inmersión en Python > Conozcamos Python > Correspondencia de listas | << >> | ||||
diveintopython.org Python para programadores con experiencia |
Una de las más potentes características de Python es la creación de listas por comprensión, que proporciona una forma compacta de relacionar una lista con otra aplicando una función a los elementos de la primera.
Ejemplo 1.30. Introducción a las listas por comprensión
>>> li = [1, 9, 8, 4] >>> [elem*2 for elem in li] [2, 18, 16, 8] >>> li [1, 9, 8, 4] >>> li = [elem*2 for elem in li] >>> li [2, 18, 16, 8]
Ejemplo 1.31. Listas por comprensión en buildConnectionString
["%s=%s" % (k, v) for k, v in params.items()]
En primer lugar, advierta que se está llamando a la función items del diccionario params. Esta función devuelve una lista de tuplas con todos los datos del diccionario.
Ejemplo 1.32. keys, values, e items
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"} >>> params.keys() ['server', 'uid', 'database', 'pwd'] >>> params.values() ['mpilgrim', 'master', 'sa', 'secret'] >>> params.items() [('server', 'mpilgrim'), ('uid', 'sa'), ('database', 'master'), ('pwd', 'secret')]
Veamos ahora qué hace buildConnectionString. Toma una lista, params.items(), y la transforma en una nueva lista aplicando el formato de cadenas a cada elemento. La nueva lista tendrá el mismo número de elementos que params.items(), pero cada elemento de la nueva lista será una cadena que contiene tanto la clave como su valor asociado en el diccionario params.
Ejemplo 1.33. Listas por comprensión en buildConnectionString, paso a paso
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"} >>> params.items() [('server', 'mpilgrim'), ('uid', 'sa'), ('database', 'master'), ('pwd', 'secret')] >>> [k for k, v in params.items()] ['server', 'uid', 'database', 'pwd'] >>> [v for k, v in params.items()] ['mpilgrim', 'sa', 'master', 'secret'] >>> ["%s=%s" % (k, v) for k, v in params.items()] ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
Advierta que estamos usando dos variables para recorrer la lista params.items(). Este es otro uso de la asignación múltiple. El primer elemento de params.items() es ('server', 'mpilgrim'), de modo que en el primer ciclo de la relación, k tomará el valor 'server' y v el valor 'mpilgrim'. En este caso ignoramos el valor de v y sólo incluimos el de k en la lista devuelta, por lo que esta relación equivale finalmente a params.keys(). (No se utilizaría realmente una relación de listas como esta en el código real; es sólo un ejemplo demasiado simple para entender qué pasa aquí). | |
Aquí hacemos lo mismo, pero ignoramos el valor de k, de manera que esta relación equivale finalmente a params.values(). | |
Combinando los dos ejemplos anteriores con un simple formato de cadenas, obtenemos una lista de cadenas que incluyen tanto la clave como el valor de cada elemento del diccionario. Esto se parece sospechosamente a la salida del programa; todo lo que queda por hacer es unir los elementos de esta lista en una única cadena. |
Lecturas complementarias
Formato de cadenas | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | Unión y división de cadenas |