Список в столбцы (одномерный список, несколько столбцов) - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь написать последовательность, чтобы взять одномерный список (независимо от размера) и распечатать его в 2 столбца.Пока что то, что у меня есть, возвращает ошибку «Индекс вне диапазона».

В идеале, я бы хотел, чтобы он напечатал индекс [0] в качестве заголовка (который я записал вуже), а затем распечатать остальные индексы следующим образом:

- - - - - - - - - - - - - - - - - - - - - - - - -
                     NAMES
- - - - - - - - - - - - - - - - - - - - - - - - -
     Rudolph S.                    Vena U.
     Josef M.                      Efrain L.
     Joye A.                       Mee H.
     Joni M.                       Tanya E.
     Rachelle L.                   Garrett H.

До сих пор я видел много примеров использования .zip (*) и других способов сделать что-то аналогично , но обычно включает двухмерный список, которого у меня нет.Кто-нибудь знает, как это можно улучшить?

spacing = '- ' * 25
data_list = [ "NAMES",
              "Rudolph S.",
              "Josef M.",
              "Joye A.",
              "Joni M.",
              "Rachelle L.",
              "Vena U.",
              "Efrain L.",
              "Mee H.",
              "Tanya E.",
              "Garrett H."]
while True:

    fname_prompt = input("First Name: ").strip().capitalize()

    if fname_prompt == "List" or fname_prompt == "list" or fname_prompt == "LIST":
        for item, val in enumerate(data_list):
            if item == 0:
                print(spacing)
                print('{:>27s}'.format(str(data_list[item])))
                print(spacing)

            else:
                if item <= len(data_list):
                    print('{:<10s}'.format(str(data_list[item]) + '{:>20s}'.format(str(data_list[item +1]))))
                else:
                    break

Ответы [ 3 ]

0 голосов
/ 21 мая 2018

Надеюсь, что приведенный ниже код поможет.

if fname_prompt.lower() == "list":
    for item, val in enumerate(data_list):
        if item == 0:
            print(spacing)
            print('{:>27s}'.format(str(data_list[item])))
            print(spacing)

        else:
            cut_off = int((len(data_list)+1)/2)
            for i in range(1,int(len(dat_list)/2)):
                print (data_list[i], '\t\t\t' , data_list[cut_off+i])

Вы также можете изменить первое условие if (item==0), но я бы оставил вам возможность оставить все так, как вы этого хотели. Надеюсь, это поможет.

Happy Coding:)

0 голосов
/ 21 мая 2018

Пакет more-itertools делает это.В частности, метод деления .

0 голосов
/ 21 мая 2018

Вы можете попробовать что-то вроде этого в формате:

print("{0:^40}".format(data_list[0]))
for i in range(1,len(data_list), 2):
   name1 = data_list[i]
   name2 = data_list[i+1]
   print("{0:<20}{1:>20}\n".format(name1, name2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...