右对齐打印值的Pythonic方法是什么?

发布于 2024-11-17 03:15:20 字数 929 浏览 1 评论 0 原文

我有一个字符串列表,我想按后缀对其进行分组,然后右对齐打印值,并用空格填充左侧。

pythonic 方法是什么?

我当前的代码是:

def find_pos(needle, haystack):
    for i, v in enumerate(haystack):
        if str(needle).endswith(v):
            return i
    return -1

# Show only Error and Warning things
search_terms = "Error", "Warning"
errors_list = filter(lambda item: str(item).endswith(search_terms), dir(__builtins__))

# alphabetical sort
errors_list.sort()
# Sort the list so Errors come before Warnings
errors_list.sort(lambda x, y: find_pos(x, search_terms) - find_pos(y, search_terms))

# Format for right-aligning the string
size = str(len(max(errors_list, key=len)))
fmt = "{:>" + size + "s}"
for item in errors_list:
    print fmt.format(item)

我想到的另一种选择是:

size = len(max(errors_list, key=len))
for item in errors_list:
    print str.rjust(item, size)

我仍在学习Python,因此也欢迎其他有关改进代码的建议。

I've a list of strings which I want to group by their suffix and then print the values right-aligned, padding the left side with spaces.

What is the pythonic way to do that?

My current code is:

def find_pos(needle, haystack):
    for i, v in enumerate(haystack):
        if str(needle).endswith(v):
            return i
    return -1

# Show only Error and Warning things
search_terms = "Error", "Warning"
errors_list = filter(lambda item: str(item).endswith(search_terms), dir(__builtins__))

# alphabetical sort
errors_list.sort()
# Sort the list so Errors come before Warnings
errors_list.sort(lambda x, y: find_pos(x, search_terms) - find_pos(y, search_terms))

# Format for right-aligning the string
size = str(len(max(errors_list, key=len)))
fmt = "{:>" + size + "s}"
for item in errors_list:
    print fmt.format(item)

An alternative I had in mind was:

size = len(max(errors_list, key=len))
for item in errors_list:
    print str.rjust(item, size)

I'm still learning Python, so other suggestions about improving the code is welcome too.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

々眼睛长脚气 2024-11-24 03:15:20

非常接近。

fmt = "{:>{size}s}"
for item in errors_list:
    print fmt.format(item, size=size)

Very close.

fmt = "{:>{size}s}"
for item in errors_list:
    print fmt.format(item, size=size)
想你的星星会说话 2024-11-24 03:15:20
  1. 这两个排序步骤可以合并为一个:

    errors_list.sort(key=lambda x: (x, find_pos(x, search_terms)))
    

    通常,使用 key 参数优于使用 cmp排序文档

  2. 如果您对长度感兴趣,请使用 max() 的 >key 参数有点毫无意义。我会去

    宽度 = max(map(len, error_list))
    
  3. 由于长度在循环内不会改变,我只会准备一次格式字符串:

    right_align = ">{}".format(宽度)
    
  4. 在循环内,您现在可以使用免费的 format() 函数 (即不是 str 方法,但内置函数):

    对于errors_list中的项目:
        打印格式(项目,右对齐)
    
  5. str.rjust(item, size)< /code> 通常且最好写为item.rjust(size).

  1. The two sorting steps can be combined into one:

    errors_list.sort(key=lambda x: (x, find_pos(x, search_terms)))
    

    Generally, using the key parameter is preferred over using cmp. Documentation on sorting

  2. If you are interested in the length anyway, using the key parameter to max() is a bit pointless. I'd go for

    width = max(map(len, errors_list))
    
  3. Since the length does not change inside the loop, I'd prepare the format string only once:

    right_align = ">{}".format(width)
    
  4. Inside the loop, you can now do with the free format() function (i.e. not the str method, but the built-in function):

    for item in errors_list:
        print format(item, right_align)
    
  5. str.rjust(item, size) is usually and preferrably written as item.rjust(size).

七婞 2024-11-24 03:15:20

您可能需要查看此处,其中描述了如何正确-使用 str.rjust 并使用打印格式进行调整。

You might want to look here, which describes how to right-justify using str.rjust and using print formatting.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文