#python
Вопрос:
В Python у меня есть список списков, подобных этому:
vote_count = [('Matthew', 5), ('Harry', 8)]
и я хочу распечатать список таким образом, чтобы второй столбец чисел был выровнен и начинался с 3 пробелов после самой длинной строки в первом столбце, как это:
Matthew 5 Harry 8
В настоящее время мой код печатает массив в двух левых выровненных столбцах, но не в соответствии с требуемыми спецификациями. Как я должен изменить инструкцию по печати, чтобы сделать это?
vote_count = [('Matthew', 5), ('Harry', 88)] for i in vote_count: print("%-10s" "%i" % (i[0], i[1]))
Ответ №1:
Попробуйте выполнить следующее, в котором используется понимание генератора, чтобы сначала определить наибольшую длину, а затем распечатать вывод соответствующим образом, используя f-строку.
vote_count = [('Matthew', 5), ('Harry', 8)] longest = max(len(name) for name, _ in vote_count) for name, cnt in vote_count: print(f'{name:{longest}} {cnt}') # Matthew 5 # Harry 8
Ответ №2:
vote_count = [('Matthew', 5), ('MatthewMatthewHarryHarry', 20), ('Harry', 88)] vote_count_new = [] maxlen = 0 space_dist = 3 maxlen = max([(len(i[0]) len(str(i[1]))) for i in vote_count]) for i in vote_count: vote_count_new.append((i[0] ' ' * ((maxlen - len(i[0]) - len(str(i[1]))) (space_dist-1)), i[1])) for i in vote_count_new: print(i[0], i[1]) SCENARIO 1 Output: vote_count = [('Matthew', 5), ('MatthewMatthewHarryHarry', 20), ('Harry', 88)] Matthew 5 MatthewMatthewHarryHarry 20 Harry 88 SCENARIO 2 Output: vote_count = [('Matthew', 5), ('MatthewMatthewHarryHarry', 20), ('Harry', 88), ('MatthewMatthewHarryHarry', 123456789)] Matthew 5 MatthewMatthewHarryHarry 20 Harry 88 MatthewMatthewHarryHarry 123456789