gpt4 book ai didi

python - 会思考的 python

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:50 25 4
gpt4 key购买 nike

我最近一直在学习 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 个数字的对齐行,计算最大宽度加一;但我几乎确信有一个:

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

无论如何我都不是大 O 方面的专家,但我相信我的两个 for 循环将它从 O(n) 更改为至少 O(2n),所以我真的很想看看是否有可能以某种方式将它们结合起来。我也不太喜欢我的 format_string 声明,有更好的方法吗?你不是在帮助我作弊或任何事情,我认为这将通过大多数 Python 类(class),我只是想更多地围绕 Python 的思维方式,因为我主要来自 Perl(不确定它是否显示: ).提前致谢!

最佳答案

  • 您不需要每次都生成format_string。使用str.rjust ,您不需要使用格式字符串。
  • 不使用 x % num_row(列表的一个元素),而是使用 i(使用 enumerate(a, 1) 的基于 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

关于python - 会思考的 python ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18074138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com