Python-如何在两列中整齐地打印并行列表/数组......?

时间:2015-03-19 21:24:17

标签: python arrays list two-columns

我将在前面说明我是一名初学者,这是关于编程类介绍中的家庭作业......

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

我目前在模块中使用以下代码来打印我的列表(由工资和员工的参数'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。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

有一个名为 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

答案 2 :(得分:0)

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来完成。它的功能更强大。

答案 3 :(得分:0)

偏离主题,但既然你正在学习,这可以帮助你:

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