![](/img/trans.png)
[英]How can I get the 10th item of the <li> elements in an <ul> with Selenium using Python?
[英]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
是一个包含几十个项目的列表。 我的两个问题:
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 的高分并且仍然保持一致。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.