【问题标题】:Pad right multi-line string右填充多行字符串
【发布时间】:2016-09-24 09:55:18
【问题描述】:

从here找到这段代码sn-p后

'{0: <16}'.format('Hi')

我能够正确填充字符串 - 这就是我所追求的。 我写了一个函数来处理多行字符串,但我感觉有一个更快、更 Pythonic 的方法: 字符串用“。”填充。只是一个例子。

#!/usr/bin/python

def r_pad_string (s):

  listy = s.splitlines()

  w = 0
  ss = ""

  for i in range(0, len(listy)):
    l = len(str(listy[i]))
    if  l > w:
      w = l

  for i in range(0, len(listy)):
    pad = str(listy[i]).ljust(w, ".")
    ss += pad + "\n"

  return  ss


myStr1 = "  ######\n"  \
         " ########\n" \
         "##  ##  ##\n" \
         "## ### ###\n" \
         "##########\n" \
         "##########\n" \
         "##  ##  ##\n" \
         "#   #   #"

myStr2 = """Spoons
  are
great!!!"""

print r_pad_string(myStr1)
print r_pad_string(myStr2)

【问题讨论】:

    标签: python string python-2.7 padding


    【解决方案1】:

    max-函数存在,它消除了您的第一个循环。并且join 可用于再次将线条粘在一起:

    def r_pad_string(s):
        lines = s.splitlines()
        width = max(len(l) for l in lines)
        return "\n".join(
            line.ljust(width, ".")
            for line in lines
        )
    

    一般说明:缩进每级应为 4 个空格,变量名应说话。可以直接对行进行迭代,而不是借助索引。当它确实有助于可读性时,只使用空行。 listy 的元素已经是字符串了,不用一遍又一遍地转成字符串。

    【讨论】:

      【解决方案2】:
      def r_pad_string2(s, fillchar='.'):                    
          lines = s.splitlines()
          max_len = max(len(l) for l in lines)
          return '\n'.join(l.ljust(max_len, fillchar) for l in lines)
      

      时间安排:

      In [12]: %timeit r_pad_string(myStr1)
      100000 loops, best of 3: 5.38 µs per loop
      
      In [13]: %timeit r_pad_string2(myStr1)
      100000 loops, best of 3: 3.43 µs per loop
      
      In [14]: %timeit r_pad_string(myStr2)
      100000 loops, best of 3: 2.48 µs per loop
      
      In [15]: %timeit r_pad_string2(myStr2)
      1000000 loops, best of 3: 1.9 µs per loop
      

      所以它并没有那么快,但对眼睛来说更容易。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-11
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 2019-06-12
        • 2013-07-16
        • 2010-10-19
        相关资源
        最近更新 更多