我将在前面说明我是一名初学者,这是关于编程类介绍中的家庭作业......
我有两个平行的员工姓名和薪水清单,按升序工资排序,以千为增量。我不知道每次程序运行时列表中有多少元素......它取决于每次用户输入的数量。
我目前在模块中使用以下代码来打印我的列表(由工资和员工的参数'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。
答案 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.ljust和string.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)):
(第一个更好,因为它更多的是失败证明,如果它们不具有相同的大小,它将只迭代最小的阵列。)
此外,命名变量E
和S
不是很好。 salaries
和employees
会更好。
更进一步,您可以定义一个简单的结构:
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))