繁体   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