Как добавить колонку с нумерацией в таблицу созданную с помощью f строк
Driver = namedtuple('Driver', 'driver_id, name, team, lap_time')
drivers = [Driver(driver_id='SVF', name='Sebastian Vettel', team='FERRARI', lap_time='0:01:04.415000'),
Driver(driver_id='VBM', name='Valtteri Bottas', team='MERCEDES', lap_time='0:01:12.434000'),
Driver(driver_id='SVM', name='Stoffel Vandoorne', team='MCLAREN RENAULT', lap_time='0:01:12.463000')]
columns = ['ID', 'Racer', 'Team', 'Time']
# расчёт максимальной длинны колонок
max_columns = []
for col in zip(*drivers):
len_el = []
[len_el.append(len(el)) for el in col]
max_columns.append(max(len_el))
# печать таблицы с колонками максимальной длинны строки
# печать шапки таблицы
for n, column in enumerate(columns):
print(f'|{column:{max_columns[n]+1}}', end='')
print()
# печать разделителя шапки '-'
r = f'{"-"*sum(max_columns)+"-"*9}'
print(r)
# печать тела таблицы
for el in drivers:
for n, col in enumerate(el):
print(f'|{col:{max_columns[n]+1}}', end='')
print()
Вот что получаю на выходе:
|ID |Racer |Team |Time
----------------------------------------------------------
|SVF |Sebastian Vettel |FERRARI |0:01:04.415000
|VBM |Valtteri Bottas |MERCEDES |0:01:12.434000
|SVM |Stoffel Vandoorne |MCLAREN RENAULT |0:01:12.463000
необходимо слева добавить колонку: в шапку №, в тело нумерацию
Ответы (2 шт):
Автор решения: Сергей Ш
→ Ссылка
Примерно так:
# tmp = ""
# for n, column in enumerate(columns):
# tmp += f' |{column:{max_columns[n]+1}}'
# print(f'№ {tmp}')
r = f'{"-"*sum(max_columns)+"-"*9}'
print(f'№ {"".join(f" |{column:{max_columns[n]+1}}" for n, column in enumerate(columns))}\n{r}')
for i, el in enumerate(drivers,1):
tmp = ""
for n, col in enumerate(el):
tmp += f' |{col:{max_columns[n]+1}}'
print(f'{i} {tmp}')
Автор решения: Namerek
→ Ссылка
pip install tabulate
from collections import namedtuple
from tabulate import tabulate
Driver = namedtuple('Driver', 'driver_id, name, team, lap_time')
drivers = [Driver(driver_id='SVF', name='Sebastian Vettel', team='FERRARI', lap_time='0:01:04.415000'),
Driver(driver_id='VBM', name='Valtteri Bottas', team='MERCEDES', lap_time='0:01:12.434000'),
Driver(driver_id='SVM', name='Stoffel Vandoorne', team='MCLAREN RENAULT', lap_time='0:01:12.463000')]
columns = ['№', 'ID', 'Racer', 'Team', 'Time']
print(
tabulate(
drivers,
headers=columns,
tablefmt='simple',
showindex=range(1, len(drivers) + 1)
)
)
# № ID Racer Team Time
# -- ---- ----------------- --------------- --------------
# 1 SVF Sebastian Vettel FERRARI 0:01:04.415000
# 2 VBM Valtteri Bottas MERCEDES 0:01:12.434000
# 3 SVM Stoffel Vandoorne MCLAREN RENAULT 0:01:12.463000
вобщем там много настроек и форматы вывода разные https://pypi.org/project/tabulate/
К примеру формат pipe на печати будет выглядеть так
| № | ID | Racer | Team | Time |
|----:|:-----|:------------------|:----------------|:---------------|
| 1 | SVF | Sebastian Vettel | FERRARI | 0:01:04.415000 |
| 2 | VBM | Valtteri Bottas | MERCEDES | 0:01:12.434000 |
| 3 | SVM | Stoffel Vandoorne | MCLAREN RENAULT | 0:01:12.463000 |
А здесь вот так:
| № | ID | Racer | Team | Time |
|---|---|---|---|---|
| 1 | SVF | Sebastian Vettel | FERRARI | 0:01:04.415000 |
| 2 | VBM | Valtteri Bottas | MERCEDES | 0:01:12.434000 |
| 3 | SVM | Stoffel Vandoorne | MCLAREN RENAULT | 0:01:12.463000 |