[英]Python- How to print parallel lists/arrays, neatly, in 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。
def printArrays(S, E):
for i in S:
idx = (S.index(i))
print ("name: {0:>10} salary: ${1:>10}".format ( E[idx], i )
有一個名為prettytable的python模塊,可能適合您的情況, 請參見此處 。 您將可以這樣做:
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
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完成。 它甚至更強大。
偏離主題,但由於您正在學習,因此可以幫助您:
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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.