+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

思维Python

发布于2020-05-29 22:10     阅读(813)     评论(0)     点赞(29)     收藏(4)


我最近一直在学习Python,今晚我在玩一些示例,我只是想出了以下几点:

#!/usr/bin/env python
a = range(1,21)    # Range of numbers to print
max_length = 1     # String length of largest number
num_row = 5        # Number of elements per row

for l in a:
    ln = len(str(l))
    if max_length <= ln:
        max_length = ln

for x in a:
    format_string = '{:>' + str(max_length) + 'd}'
    print (format_string).format(x),
    if not x % num_row and x != 0:
        print '\n',

输出以下内容:

 1  2  3  4  5 
 6  7  8  9 10 
11 12 13 14 15 
16 17 18 19 20

脚本正在执行我想要的操作,即打印每行5个数字的对齐行,并计算最大宽度加1。但我几乎确信其中有一个:

  • 更多“ pythonic”方式做到这一点
  • 更有效的方法

我无论如何都不是大O的专家,但我相信我的两个for循环会将其从O(n)更改为至少O(2n),所以我真的很想看看是否有可能以某种方式组合它们。我也不太热衷于format_string声明,是否有更好的方法可以做到这一点?您并没有帮助我作弊或做任何事情,我认为这会通过大多数Python类,我只是想把头更多地围绕在Python的思考方式上,因为我主要来自Perl(不确定它是否显示: )。提前致谢!


解决方案


  • 您不需要format_string每次都使用str.rjust,您不需要使用格式字符串。
  • 而不是使用x % num_row(列表的元素),而使用i(基于1的索引,使用enumerate(a, 1))。考虑一个案例a = range(3, 34)
    • 您可以丢弃,i == 0因为i永远不会0
  • not x % num_row很难理解。使用x % num_row == 0代替。

a = range(1,21)
num_row = 5

a = map(str, a)
max_length = len(max(a, key=len))
for i, x in enumerate(a, 1):
    print x.rjust(max_length),
    if i % num_row == 0:
        print


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/397413/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

29 0
收藏该文
已收藏

评论内容:(最多支持255个字符)