Создание таблицы с использованием списка строк - PullRequest
0 голосов
/ 18 ноября 2018

Мне нужно преобразовать список списков строк в таблицу из трех столбцов, где первый столбец на 1 пробел длиннее самой длинной строки. Я выяснил, как определить самую длинную строку и как долго она длится, но получить таблицу для формирования было довольно сложно. Вот программа со списками в ней, и она показывает, что самый длинный из них имеет длину 26 символов.

def main():
    mycities = [['Cape Girardeau', 'MO', '63780'], ['Columbia', 'MO', '65201'], 
                ['Kansas City', 'MO', '64108'], ['Rolla', 'MO', '65402'], 
                ['Springfield', 'MO', '65897'], ['St Joseph', 'MO', '64504'], 
                ['St Louis', 'MO', '63111'], ['Ames', 'IA', '50010'], ['Enid', 
                'OK', '73773'], ['West Palm Beach', 'FL', '33412'],
                ['International Falls', 'MN', '56649'], ['Frostbite Falls', 
                'MN', '56650']]

    col_width = max(len(item) for sub in mycities for item in sub)
    print(col_width)


main()

Теперь мне просто нужно заставить его распечатать так:

Cape Girardeau      MO 63780
Columbia            MO 65201
Kansas City         MO 64108
Springfield         MO 65897
St Joseph           MO 64504
St Louis            MO 63111
Ames                IA 50010
Enid                OK 73773
West Palm Beach     FL 33412
International Falls MN 56649
Frostbite Falls     MN 56650

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

Вы находитесь в правильном начале - в качестве примера, учитывая конкретную структуру ваших списков, вы можете использовать col_width, который вы рассчитали, чтобы определить количество пробелов, которое вам понадобится после имени каждого город, добавляемый в конце каждого названия города:

for city in mycities:
    # append the string with the number of spaces required
    city_padded = city[0] + " " + " "*(col_width-len(city[0]))
    print(city_padded + city[1] + " " + city[2])

Учитывая ваш пример, это даст:

Cape Girardeau      MO 63780
Columbia            MO 65201
Kansas City         MO 64108
Rolla               MO 65402
Springfield         MO 65897
St Joseph           MO 64504
St Louis            MO 63111
Ames                IA 50010
Enid                OK 73773
West Palm Beach     FL 33412
International Falls MN 56649
Frostbite Falls     MN 56650

Обратите внимание, что в исходной версии вашего вопроса вы пропускаете запятые в ваших подсписках в переменной mycities, которую я добавил в редактировании.

В качестве дополнительного примечания в Python принято разделять слова в именах переменных символами подчеркивания, чтобы вы могли читать их, поэтому вы можете переименовать mycities в my_cities.

pep8 ref: (https://www.python.org/dev/peps/pep-0008/#function-and-variable-names)

0 голосов
/ 18 ноября 2018

«String name» .ljust (26) добавит пробелы в конец вашей строки.Например,

Ames.ljust (26) приведет к 'Ames (здесь 22 пробела)', а затем будет напечатан следующий столбец.Если вы не уверены, каким будет самый длинный город, вы можете заменить 26 на len (города [-1]) после упорядочения городов в списке по длине.Для этого вы можете сделать sortedCities = sorted (cityListVariable, key = len)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...