Imprimir Tabla con Espacios
Descripción
Escribe una función llamada printTable()
que tome una lista de listas de cadenas y la muestra como una tabla con formato de espacios alineados, en dónde cada columna, está justificada/alineada a la derecha. Puedes asumir que todas las listas internas contienen la misma cantidad de cadenas. Por ejemplo, la lista puede verse así:
tableData = [
['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']
]
Tu función printTable()
debe imprimir lo siguiente:
apples Alice dogs
oranges Bob cats
cherries Carol moose
banana David goose
Consejos: Tú código primero debe encontrar la cadena más larga en cada lista interna para que la columan pueda ser suficientemente ancha para todas las cadenas que contendrá.
Puedes almacenar el ancho máximo de cada columna como una lista de enteros.
La función printTable()
puede comenzar con este código colWidths = [0] * len(tableData)
, la cual crea una lista que contiene el mismo número de 0s que el número de listas internas en la variable tableData
.
De esta forma, colWidths[0]
puede guardar el ancho de la cadena más larga en tableData[0]
, colWidths[1]
almacena el ancho de la palabra más larga en tableData[1]
y así sucesivamente.
Después usa el valor más largo de la lista colWidths
como valor para indicar el justificado al método rjust()
de cadena cadena.
Ejemplo de Ejecución:
printTable(tableData)
apples Alice dogs
oranges Bob cats
cherries Carol moose
banana David goose
Solución
Mostrar solución
tableData = [['apples', 'oranges', 'cherries', 'banana'],
['Alice', 'Bob', 'Carol', 'David'],
['dogs', 'cats', 'moose', 'goose']]
def printTable(tableData):
colWidths = [0] * len(tableData)
for rowIndex, row in enumerate(tableData):
for item in row:
if len(item) > colWidths[rowIndex]:
colWidths[rowIndex] = len(item)
for j in range(len(tableData[0])):
for i in range(len(tableData)):
print(tableData[i][j].rjust(colWidths[i]), end=' ')
print()
Fuente del ejercicio: https://automatetheboringstuff.com/2e/chapter6/#calibre_link-235