簡體   English   中英

使用 'max' 和 'len' 正確格式化列表的第 10 項

[英]Using 'max' and 'len' to properly format the 10th item of a list

    for i, items in enumerate(zip(member_names, scores)):
        if i < 10:
            if i == 9:
                msg += "{:<1}. {:<{names_len}} <{:,}>\n".format(i + 1, *items, names_len=len(max(member_names, key=len)) - 1)
                continue
            msg += "{:<1}. {:<{names_len}} <{:,}>\n".format(i + 1, *items, names_len=len(max(member_names, key=len)))

這是一個示例輸出:

1. xxxx#1598         <12,704>
2. xxxxxxxxxxxx#2390 <7,151>
3. xxxxx#4966        <5,859>
4. xxxx#3562         <3,051>
5. xxxxxxx#6967      <2,831>
6. xxxxx#4643        <2,073>
7. xxxxx#2006        <1,833>
8. xxxx#4720         <1,679>
9. xxxx#8049         <1,651>
10. xxxxxxxxxxxx#8514 <1,614>

member_names是一個包含幾十個項目的列表。 我的兩個問題:

  1. 我無法正確解釋列表中的第 10 項需要少一個縮進空間這一事實。
  2. 因此,如您所見,第 10 項在使用names_len不會將縮進擴展一個額外的字符。

有人能幫忙嗎? 我是個新手,已經被這個問題難住了很長一段時間。

我會試着把整件事整理一下。 讓我們提前找出最大長度(而不是每個循環確定一次); 與最大索引號相同:

num_items = len(str(len(member_names)))
max_length = len(max(member_names, key=len))
for i, items in enumerate(zip(member_names, scores)):
    msg += "{:>{n}}. {:<{m}} <{:,}>\n".format(i + 1, n=num_items, *items, m=max_length)

(我希望這可以正常工作 - 無法訪問您的數據就無法對其進行測試)

您可以通過將它們右對齊來簡單地識別較低的數字:

member_names = [f"name_{i}" for i in range(14)]
scores = [3**i for i in range(14)]

maxlen = len(max(member_names, key=len)) # calculate only once
msg = ""
for i, items in enumerate(zip(member_names, scores)):
    msg += "{:>2}. {:<{ml}} <{:,}>\n".format(i + 1, *items,ml=maxlen)

print(msg)

輸出:

 1. name_0  <1>
 2. name_1  <3>
 3. name_2  <9>
 4. name_3  <27>
 5. name_4  <81>
 6. name_5  <243>
 7. name_6  <729>
 8. name_7  <2,187>
 9. name_8  <6,561>
10. name_9  <19,683>
11. name_10 <59,049>
12. name_11 <177,147>
13. name_12 <531,441>
14. name_13 <1,594,323>

請參閱Tim Pietzckers 的答案以獲取更靈活的方法,該方法將允許 > 99 的高分並且仍然保持一致。

len()已經返回列表中的項目數。 (文檔) max()返回最高數字。 (文檔)

所以len(max())返回 1,因為它在列表中尋找最高的數字 (10),然后調用 len(10),其中 == 1

暫無
暫無

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

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