Использование списочного понимания для побочного эффекта - плохой стиль: вы создаете полный список (который занимает время и память), который впоследствии выбрасывается - используйте простые циклы.
Вам необходимо вычислить длину каждого слово (в каждом столбце). Получить максимальную длину ваших слов просто:
data = [['FirstFirst', 'FirstSecond', 'FirstThird'],
['SecondFirst', 'SecondSecond', 'SecondThird'],
['ThirdFirst', 'ThirdSecond', 'ThirdThird'],
['foo', 'verylongwordinsidehere', 'bar', ]] # changed to a longer one
# get max word length
max_len = max(len(i) for j in data for i in j)
# do not use list comp for printing side effect - use a simple loop
for inner in data:
for word in inner:
print(f"{word:{max_len}}",end=" | ") # and format the length into it
print()
, чтобы получить
FirstFirst | FirstSecond | FirstThird |
SecondFirst | SecondSecond | SecondThird |
ThirdFirst | ThirdSecond | ThirdThird |
foo | verylongwordinsidehere | bar |
Это выглядит довольно уродливо, было бы лучше, если бы вы получили только максимальную длину для столбца imho:
# transpose the list, get the max of each column and store in as dict[column]=legnth
col_len = {i:max(map(len,inner)) for i,inner in enumerate(zip(*data))}
# print(col_len) # {0: 11, 1: 22, 2: 11}
# print using the column index from enumerate to lookup this columns lenght
for inner in data:
for col,word in enumerate(inner):
print(f"{word:{col_len[col]}}",end=" | ")
print()
, чтобы получить вывод, скорректированный по ширине столбца:
FirstFirst | FirstSecond | FirstThird |
SecondFirst | SecondSecond | SecondThird |
ThirdFirst | ThirdSecond | ThirdThird |
foo | verylongwordinsidehere | bar |
См.
Если вам нужно сделать его короче, вы можете использовать ' | '.join()
для печати списков:
# do not use list comp for printing side effect - use a simple loop
for inner in data:
print( ' | '.join( (f"{word:{max_len}}" for word in inner)))
Если вам нужно также распечатать неровные списки, zip () не подойдет - вы можете обойти это (исследование itertiols.zip_longest), но если вам это действительно нужно, задайте новый вопрос с данными для этого после того, как вы попытались что-то сделать, чтобы сделать то, что вам нужно.