【问题标题】:formatting string outputs in python在python中格式化字符串输出
【发布时间】:2014-02-28 15:16:29
【问题描述】:
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 7]
[1, 2, 3, 4, 6, 7]
[1, 2, 3, 5, 6, 7]
[1, 2, 4, 5, 6, 7]
[1, 3, 4, 5, 6, 7]
[2, 3, 4, 5, 6, 7]


1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 6 7
1 2 3 5 6 7
1 2 4 5 6 7
1 3 4 5 6 7
2 3 4 5 6 7

我创建了一个程序,我试图以字符串格式而不是列表来获取我的输出。我认为在这种情况下连接分隔符对我有用,但是我不知道在这种情况下在哪里以及如何实现它。第二组输出是我想要的。

【问题讨论】:

  • 这似乎微不足道。你试过什么?
  • 确实是微不足道的。这里的答案似乎已经涵盖了它。一次打印,一次生成字符串,中间有换行符。想不出别的办法了。

标签: python string list join


【解决方案1】:

给定

data = [
    [1, 2, 3, 4, 5, 6],
    [1, 2, 3, 4, 5, 7],
    [1, 2, 3, 4, 6, 7],
    [1, 2, 3, 5, 6, 7],
    [1, 2, 4, 5, 6, 7],
    [1, 3, 4, 5, 6, 7],
    [2, 3, 4, 5, 6, 7],
    ]

这个

for row in data:
    # apply str to each item in row using map.  join result with space.
    print ' '.join(map(str, row)) 

输出

1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 6 7
1 2 3 5 6 7
1 2 4 5 6 7
1 3 4 5 6 7
2 3 4 5 6 7

【讨论】:

    【解决方案2】:

    假设您的代码如下所示:

    my_list=[ [ '1', '2', '3'],
      [ '1', '2', '3'],
      [ '1', '2', '3'] ]
    

    这应该会产生您想要的输出:

    '\n'.join(''.join(line) for line in my_list)
    

    如果你的元素不是字符串,你也需要转换它们:

    '\n'.join(''.join(str(element) for element in line) for line in my_list)
    

    【讨论】:

      【解决方案3】:

      ' ' 加入内部列表,用'\n' 加入外部列表:

      In [125]: l
      Out[125]: 
      [[1, 2, 3, 4, 5, 6],
       [1, 2, 3, 4, 5, 7],
       [1, 2, 3, 4, 6, 7],
       [1, 2, 3, 5, 6, 7],
       [1, 2, 4, 5, 6, 7],
       [1, 3, 4, 5, 6, 7],
       [2, 3, 4, 5, 6, 7]]
      
      In [126]: print '\n'.join(' '.join(map(str, i)) for i in l )
      1 2 3 4 5 6
      1 2 3 4 5 7
      1 2 3 4 6 7
      1 2 3 5 6 7
      1 2 4 5 6 7
      1 3 4 5 6 7
      2 3 4 5 6 7
      

      【讨论】:

      • 注意他/她的数据是几个列表,而不是列表的列表。
      • 这可能是个误会。在我看来,OP 只是在讨论两种不同的可能输出格式。
      【解决方案4】:

      Join 是一个字符串函数

      l=[1,2,3,4,5,6,7]
      print ' '.join(map(str,l))
      # 1 2 3 4 5 6 7
      

      【讨论】:

        【解决方案5】:

        很大程度上取决于您可能会遇到的值的范围。其他解决方案适用于发布的数据,但如果还包含两位数的值,则无法对齐所有内容,因为数字的字符串表示具有可变宽度。

        在这种情况下,可以生成格式字符串以确保正确对齐,并且在处理数值时,这通常比不对齐更可取,因为不对齐会使人类读者难以轻松关联列的所有值。

        假设所有数据行的长度相同,下面的代码是一个合适的模型。

        data = [
            [11, 2, 3, 4, 5, 6],
            [1, 22, 3, 4, 5, 7],
            [1, 2, 33, 4, 6, 7],
            [1, 2, 3, 55, 6, 7],
            [1, 2, 4, 5, 66, 7],
            [1, 3, 4, 5, 6, 77],
            [22, 33, 44, 55, 66, 77],
            ]
        
        rowlen = len(data[0])
        item_format = "{:5d}"
        format_string = " ".join(rowlen*[item_format])
        
        for row in data:
            print format_string.format(*row)
        

        输出是

        11     2     3     4     5     6
         1    22     3     4     5     7
         1     2    33     4     6     7
         1     2     3    55     6     7
         1     2     4     5    66     7
         1     3     4     5     6    77
        22    33    44    55    66    77
        

        【讨论】:

          猜你喜欢
          • 2012-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-06
          相关资源
          最近更新 更多