列表到列(一维列表,多列)

时间:2018-05-21 06:10:04

标签: python string python-3.x list format

我正在尝试编写一个序列来获取一维列表(无论大小)并将其打印在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 :(得分:1)

你可以尝试这样的格式:

import argparse
import subprocess as sp
import ast

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--dict', help='Directory and Files', required=True, type=str)
    args = parser.parse_args()

    try:
        for folder, files in ast.literal_eval(args.dict).items():
            for file in files:
                sp.call(["rm -r", folder+file])
    except Exception as e:
        print (e)

if __name__ == '__main__':
    main()

答案 1 :(得分:1)

希望以下代码有所帮助。

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)条件,但我会让您按照自己想要的方式保留它。希望它有所帮助。

快乐编码:)

答案 2 :(得分:1)

more-itertools包执行此操作。特别是divide method