【问题标题】:List to Columns (One-Dimensional list, multiple columns)List to Columns(一维列表,多列)
【发布时间】:2018-05-21 06:10:04
【问题描述】:

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

【问题讨论】:

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


【解决方案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)condition,但我会留给您以您想要的方式保持。希望它有所帮助。

快乐编码:)

【讨论】:

    【解决方案2】:

    你可以试试这样的格式:

    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))
    

    【讨论】:

    • 这不会产生所需的输出。第二列从中位数开始。
    • 只需要从 ,哎呀
    • 不,我不是指间距。后续数组成员(i 和 i+1)不在同一 。给定 2n 个元素的数组,第一个 n 在左侧,第二个 n 在右侧。
    【解决方案3】:

    more-itertools 包就是这样做的。特别是divide method

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多