Python оставил выравнивающий текст во втором столбце, начиная с 3 пробелов после первого столбца

#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