簡體   English   中英

Python-如何在兩列中整齊地打印並行列表/數組……?

[英]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.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完成。 它甚至更強大。

偏離主題,但由於您正在學習,因此可以幫助您:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM