Вывод таблицы с выравниванием столбцов в Python (без таблиц HTML)
Для вывода таблицы с выравниванием столбцов в Python без использования HTML-таблиц можно применить строковое форматирование. Основная идея заключается в определении максимальной длины каждой колонки и использовании этой информации для создания строк с фиксированной шириной. Вот пример реализации:
data = [
["Имя", "Возраст", "Город"],
["Alice", "30", "New York"],
["Bob", "25", "London"],
["Charlie", "35", "Paris"],
["David", "40", "Tokyo"]
]
def print_aligned_table(data):
"""Печатает таблицу с выравниванием столбцов."""
col_widths = [max(len(str(item)) for item in col) for col in zip(*data)] # Определяем ширину каждой колонки
format_string = " ".join(["{{:<{}}}".format(width) for width in col_widths]) # Создаем строку форматирования
for row in data:
print(format_string.format(*row))
print_aligned_table(data)
Разъяснение кода:
- `data`: Представляет собой список списков, где каждый внутренний список – это строка таблицы.
- `col_widths`: Вычисляется максимальная длина каждой колонки. Используется `zip(*data)` для транспонирования данных (преобразования строк в колонки), затем `max()` для поиска максимальной длины в каждой колонке, а `str(item)` гарантирует, что числа тоже учитываются при определении длины.
- `format_string`: Формируется строка форматирования. Для каждой колонки создается placeholder `{{:<{}}}`, где `:<` означает выравнивание по левому краю, а `{}` будет заменено шириной колонки. `" ".join(...)` объединяет эти placeholder-ы с двойными пробелами между колонками.
- Цикл `for row in data`: Итерируется по каждой строке данных.
- `print(format_string.format(*row))`: Применяет строку форматирования к каждой строке, используя оператор `*` для распаковки строки в отдельные аргументы для метода `format()`. Это подставляет значения из строки в placeholder-ы в `format_string`, выравнивая текст по левому краю и создавая таблицу с выровненными колонками.
Альтернативные подходы:
- Использование `tabulate`: Библиотека `tabulate` предоставляет более гибкие возможности для форматирования таблиц, включая различные стили выравнивания, границы и другие опции. Требует установки: `pip install tabulate`.
- `f-strings` (Python 3.6+): Можно использовать `f-strings` для более лаконичного кода, но синтаксис может быть менее читаемым при сложной логике форматирования.
Пример использования `tabulate`:
from tabulate import tabulate
data = [
["Alice", 30, "New York"],
["Bob", 25, "London"],
["Charlie", 35, "Paris"],
["David", 40, "Tokyo"]
]
headers = ["Имя", "Возраст", "Город"]
print(tabulate(data, headers=headers, tablefmt="grid"))
Этот пример использует `tabulate` для вывода таблицы с заголовками и форматированием "grid". `tablefmt` позволяет выбирать различные стили таблиц.