【问题标题】:How to print list items which contain new line?如何打印包含新行的列表项?
【发布时间】:2014-05-24 17:09:59
【问题描述】:

这些命令:

l = ["1\n2"]    
print(l)

打印

['1\n2']

我要打印

['1
2']

当我们在print() 命令之外生成列表时是否可能?

【问题讨论】:

  • 请问,这个问题有什么问题?
  • 我没有投反对票。您可以通过明确说明您想要的内容来改进问题,例如:我想获得打印 (repr) 输出,但字符串文字应该包含换行符而不是 \n。或者你可以举更多的例子。

标签: python


【解决方案1】:

第一次尝试:

l = ["1\n2"]
print(repr(l).replace('\\n', '\n'))

上面的解决方案在棘手的情况下不起作用,例如,如果字符串是 "1\\n2" 它会替换它,但它不应该。以下是解决方法:

import re
l = ["1\n2"]
print(re.sub(r'\\n|(\\.)', lambda match: match.group(1) or '\n', repr(l)))

【讨论】:

    【解决方案2】:

    仅当您打印元素本身(或每个元素)而不是整个列表时:

    >>> a = ['1\n2']
    >>> a
    ['1\n2']
    >>> print a
    ['1\n2']
    >>> print a[0]
    1
    2
    

    当您尝试只打印整个列表时,它会打印列表的字符串表示。换行符属于单个元素,因此仅在打印该元素时才打印为换行符。否则,您将看到它们为\n

    【讨论】:

    • 这实际上并没有将元素放在类似格式的列表中,如OP的示例所示。
    【解决方案3】:

    如果你有多个元素,你应该使用这个

    >>> test = ['1\n2', '3', '4\n5']
    >>> print '[{0}]'.format(','.join(test))
    [1
    2,3,4
    5]
    

    【讨论】:

    • 请将您传递到上述行的输入发布。
    • @DSblizzard - 你运行的一定是相当老的 Python 版本。此类旧版本要求您明确编号格式字段。将'[{}]' 替换为'[{0}]' 以解决问题。
    • 你使用的是什么 Python 版本?
    【解决方案4】:

    试试这个:

    s = ["1\n2"]
    print("['{}']".format(s[0]))
    => ['1
       2']
    

    【讨论】:

    • 反对者:想发表评论吗?我的答案中的输入和输出与问题中的完全一样,那么有什么问题?
    • 我没有投反对票,但print("['{}']".format(*s)) 看起来更好,不是吗?
    • @thefourtheye 不一定,我们需要查看更多示例输入来判断这是否可行。
    猜你喜欢
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多