【问题标题】:Formatting List Output格式化列表输出
【发布时间】:2014-03-26 20:09:27
【问题描述】:

我有一个类似以下条目的列表:

[('sw1', 'sw2'), ('sw1', 'sw3'), ('sw1', 'sw4'), ('sw2', 'sw3'), ('sw2', 'sw4'), ('sw3', 'sw4')]

我想将元组转换为字符串并将它们打印在单独的行上,以便将它们作为参数传递给另一个程序:

(sw1 , sw2)\n
(sw1 , sw3)\n
(sw1 , sw4)\n
(sw2 , sw3)\n
(sw2 , sw4)\n
(sw3 , sw4)\n

我尝试了strip()split(),但元组似乎不支持这些。我假设我需要一些正则表达式来完成我想要做的事情,但即便如此,我也不确定如何处理 , 的潜在字段分隔符在元组内部和元组之间的事实。非常感谢任何指针。我老了,只是想学习编程。

【问题讨论】:

    标签: python regex list format


    【解决方案1】:
    >>>li = [('sw1', 'sw2'), ('sw1', 'sw3'), ('sw1', 'sw4'), ('sw2', 'sw3'), ('sw2', 'sw4'), ('sw3', 'sw4')]
    
    >>> print "\n".join([str(item) for item in li])
    ('sw1', 'sw2')
    ('sw1', 'sw3')
    ('sw1', 'sw4')
    ('sw2', 'sw3')
    ('sw2', 'sw4')
    ('sw3', 'sw4')
    

    另一种方式

    >>> print "\n".join(["%s" %(item,) for item in li])
    ('sw1', 'sw2')
    ('sw1', 'sw3')
    ('sw1', 'sw4')
    ('sw2', 'sw3')
    ('sw2', 'sw4')
    ('sw3', 'sw4')
    

    【讨论】:

    • 你不需要先创建一个列表推导来传递加入,只需使用生成器表达式(即去掉括号)
    • 请参阅here 以了解有关字符串join 方法的讨论。事实证明,列表推导通常比生成器表达式更快。
    【解决方案2】:

    您可以按如下方式使用字符串格式:

    a = [('sw1', 'sw2'), ('sw1', 'sw3'), ('sw1', 'sw4'), ('sw2', 'sw3'), ('sw2', 'sw4'), ('sw3', 'sw4')]
    
    for i in a:
        print('({:}, {:})'.format(*i))
    
    # (sw1, sw2)
    # (sw1, sw3)
    # (sw1, sw4)
    # (sw2, sw3)
    # (sw2, sw4)
    # (sw3, sw4)
    

    这不会改变您的元组本身,但会按照您的意愿格式化它们的打印。该代码只是遍历您的列表并打印具有给定格式的元组。字符串format方法被here覆盖。

    【讨论】:

    • 感谢您的帮助!您建议的方法符合我的期望。我对 Python 和一般编程非常陌生。我阅读了字符串格式规范,试图了解打印格式示例的实际工作方式。从我读到的花括号({})包含替换字段。我不理解的部分是冒号 (:) 如何导致从其他字符中删除引号。感谢您的澄清。
    • 元组中的引号只是说明它们是字符串,它们实际上并不存在于字符串本身中。如果您想在打印时保留引号,则可以将格式字符串替换为将打印的"('{:}', '{:}')".format(*i),例如('sw1', 'sw2')。
    • 不,我不想要引号。我玩了一下这个。似乎以下都产生相同的结果: print('({:}, {:})'.format(*i)) print('({}, {})'.format(*i)) print ('({0}, {1})'.format(*i))
    【解决方案3】:

    您可以将元组显式转换为字符串(这与您希望的完全一样) - 最后将它们与分隔符连接在一起,作为所需输出中元组之间的内容:

    >>> lst_tups = [('sw1', 'sw2'), ('sw1', 'sw3'), ('sw1', 'sw4'), ('sw2', 'sw3'), ('sw2', 'sw4'), ('sw3', 'sw4')]
    >>> my_string = '\n '.join([str(t) for t in lst_tups])
    >>> my_string
    "('sw1', 'sw2')\n ('sw1', 'sw3')\n ('sw1', 'sw4')\n ('sw2', 'sw3')\n ('sw2', 'sw4')\n ('sw3', 'sw4')"
    

    然后您可以轻松地将其输出如下;只需打印出来:

    >>> print(my_string)
    ('sw1', 'sw2')
     ('sw1', 'sw3')
     ('sw1', 'sw4')
     ('sw2', 'sw3')
     ('sw2', 'sw4')
     ('sw3', 'sw4')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-21
      • 2016-12-26
      • 1970-01-01
      • 2011-12-21
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 2023-01-28
      相关资源
      最近更新 更多