Print a right-justified list of a list
You can transpose the given list of lists using a single line:
zip(*table_data)

That's it. Now, to find the longest word in each column, it would be another 1-liner:
map(len, [max(_, key=len) for _ in table_data])


You are calculating len(table_data) a lot of times. Better to store it as a variable? Although, another comprehension could be:
for row in zip(*table_data):
    for index, cell in enumerate(row):
        print(cell.rjust(col_width[index]), end=&quot; &quot;)


You whole function now becomes:
from typing import List
def print_table(table_data: List):
    col_width = list(map(len, [max(_, key=len) for _ in table_data]))
    for row in zip(*table_data):
        for index, cell in enumerate(row):
            print(cell.rjust(col_width[index]), end=&quot; &quot;)
        print()