【问题标题】:Creating numbered list of output创建输出的编号列表
【发布时间】:2015-05-18 10:40:28
【问题描述】:

如何编辑我的代码,以便我的输出:

the      8512
and      7759
i        6182
to       6027
a        4716
of       4619
he       2873
in       2846
you      2777
was      2457

变成

1.    the    8512
2.    and    7759
3.    i      6182
4.    to     6027
5.    a      4716
6.    of     4619
7.    he     2873
8.    in     2846
9.    you    2777
10.   was    2457

我尝试使用枚举函数

for rank, (value,num) in enumerate(sorted_list):

然而,这让我得到相同的输出。我可以以某种方式将排名附加到定义 value 和 num 的列表中吗?

d = dictionary(word_list)


def sort_key (d):
    return d[1]

number = int(sys.argv[1])
sorted_list = sorted(d.items(), key=sort_key, reverse=True)[:number]


for (value,num) in sorted_list:
    value = value.ljust(5)
    num = str(num).rjust(5)

    print("{}\t{}".format(value,num))

【问题讨论】:

  • 你能告诉我们你是如何使用enumerate()的吗?这正是你应该使用什么来添加行数。
  • @MartijnPieters 通过在 enumerate(sorted_list) 中声明排名,(value,num):代替 sorted_list 中的 for (value,num):
  • 但是你得到了你想要的rank 值,尽管差一。看我的回答;我给enumerate() 一个start 参数以从1 而不是0 开始计数,但您确实需要确保打印 rank 值。即使没有start,您仍然可以轻松地将生成的排名加 1。
  • 请注意,对strings进行排序将导致按字典顺序排序,不是数字!对于使用相同位数的数字,这很好,但当您有更短或更长的序列时就不行了。

标签: python list sorting python-3.x tuples


【解决方案1】:

你仍然会使用enumerate();你没有展示你是如何使用它的,但是它解决了你的问题:

for index, (value,num) in enumerate(sorted_list, start=1):
    print("{}.\t{:<5}\t{:>5}".format(index, value,num))

我将您的str.ljust()str.rjust() 调用折叠到str.format() 模板中;这有一个额外的优势,它适用于您可以格式化的任何值,而不仅仅是字符串。

演示:

>>> word_list = '''\
... the      8512
... and      7759
... i        6182
... to       6027
... a        4716
... of       4619
... he       2873
... in       2846
... you      2777
... was      2457
... '''.splitlines()
>>> d = dict(line.split() for line in word_list)
>>> sorted_list = sorted(d.items(), key=lambda i: i[1], reverse=True)
>>> for index, (value,num) in enumerate(sorted_list, start=1):
...     print("{}.\t{:<5}\t{:>5}".format(index, value,num))
... 
1.  the      8512
2.  and      7759
3.  i        6182
4.  to       6027
5.  a        4716
6.  of       4619
7.  he       2873
8.  in       2846
9.  you      2777
10. was      2457

【讨论】:

  • 如果我想在三个部分之间保持最小的间距,我是否必须保留 ljust() 和 rjust()?
  • @Silverfin: 不,str.ljust()str.rjust() 可以完全使用 format specification mini language 功能处理。
  • 彼得斯 \t 选项卡似乎阻止我改变部分之间的距离,我继续使用 just() 方法,但我无法获得“。”正确排列。 - 见编辑。
  • @Silverfin:那你为什么还要使用标签呢?
  • @Silverfin:您可以使用 '{}.'.format(index) 来格式化 just 数字,而不是将其放入具有字段宽度和对齐方式的更大的每行格式。以print("{:&lt;3}\t{:&lt;5}\t{:&gt;5}".format('{}.'.format(index), value,num)) 为例。
猜你喜欢
  • 2013-06-09
  • 2015-04-21
  • 1970-01-01
  • 2019-10-18
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
相关资源
最近更新 更多