【问题标题】:Python- How to print parallel lists/arrays, neatly, in two columns...?Python-如何在两列中整齐地打印并行列表/数组......?
【发布时间】:2015-03-19 21:24:17
【问题描述】:

我将首先声明我是初学者,这是关于编程入门课程中的家庭作业...

我有两个平行的员工姓名和薪水列表,按薪水升序排列,以千为单位递增。我不知道每次程序运行时列表中会有多少元素...这取决于用户每次输入的数量。

我目前在模块中使用以下代码来打印我的列表(由参数“S”和“E”表示薪水和员工):

def printArrays(S, E):

    for i in S:
        idx = (S.index(i))
        print ("name:   " + E[idx] + "     salary:   $ %0.3f" % i)

上述代码的输出如下所示:

name: Joe Smith     salary: $ 25.500
name: Samantha Johnson     salary: $ 45.750
name: Dan Pak     salary: $ 75.000

我想要的是不交错的整齐列。更好的是,我希望输出看起来像这样......

Employee name:     Salary:

Joe Smith          $ 25.500
Samantha Johnson   $ 45.750
Dan Pak            $ 75.000

感谢任何指点。我曾尝试搜索如何将列表打印为列,但没有找到简单的解决方案。我不能使用字典,因为我的结果必须按工资值排序。 TIA。

【问题讨论】:

  • 在python中查找.format方法。您可以在其中给出列宽。

标签: python arrays list two-columns


【解决方案1】:
def printArrays(S, E):
    for i in S:
        idx = (S.index(i))
        print ("name: {0:>10} salary: ${1:>10}".format ( E[idx], i )

【讨论】:

    【解决方案2】:

    有一个名为 prettytable 的 python 模块在您的情况下可能很方便,see here。你可以这样做:

    from prettytable import PrettyTable
    
    def printArrays(S, E):
    
       tbl = PrettyTable(["Employee name", "Salary"])
    
       for i in S:
          idx = (S.index(i))
          tbl.add_row([E[idx], i])
    
       print tbl
    

    【讨论】:

      【解决方案3】:
      for i in S:
          idx = (S.index(i))
          print('%-20s $ %0.3f' % (E[idx], i))
      

      '%20s' 而不是'%-20s' 会右对齐。

      如果你想填充动态宽度,string.ljuststring.rjust 是你的朋友:

      max_width = max([len(x) for x in E])
      for i in S:
          idx = (S.index(i))
          print('%s $ %0.3f' % (E[idx].ljust(max_width), i))
      

      当然也可以使用 str.format 来完成。它甚至更强大。

      【讨论】:

        【解决方案4】:

        题外话,但既然你正在学习,这可以帮助你:

        for i in S:
            idx = (S.index(i))
        

        太可怕了。

        使用以下方法之一:

        for e, s in zip(E,S):
        
        for idx, i in enumerate(S):
        
        for idx in range(len(S)):
        

        (第一个更好,因为它更防故障,如果它们的大小不同,它只会在最小的数组上迭代)。

        另外,命名变量ES 也不是很好。 salariesemployees 会更好。

        更进一步,您可以像这样定义一个简单的结构:

        employees = [{'name': name, 'salary': salary} for name, salary in zip(E,S)]
        

        然后您可以直接在该列表上进行迭代并获取您需要的值:

        for employee in employees:
            print("name: {name:>10} salary: ${salary:>10}".format(**employee))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-02-25
          • 2011-04-05
          • 2020-07-17
          • 2022-11-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多