字符串格式化为带引号的行

String formatting into quoted lines

我有一个列表:

l = ['str1', 'str2', 'str3', 'str4']

我需要将其存储在一个变量中,以便将其打印为:

'str1\n'
'str2\n'
'str3\n'
'str4'

包括单引号和 \n.

现在我在做:

input_string = "\'" + l[0] + "\n\'\n\'" + l[1] + "\n\'\n\'" + l[2] + "\n\'\n\'" + l[3] + "\'"
print(input_string)

但是有没有更漂亮的方法使用 str.format() 我们不需要转义 '\n'

您可以只添加一个换行符,然后使用 repr 打印:

In [703]: for x in [x + '\n' if i != len(l) - 1 else x for i, x in enumerate(l)]:
     ...:     print(repr(x))
     ...:     
'str1\n'
'str2\n'
'str3\n'
'str4'

这不涉及转义换行符(这似乎是您想要的),但我建议转义它们。


存储到变量将涉及将 repr 存储在列表本身内,然后调用 str.join:

In [708]: string = '\n'.join([repr(x + '\n') if i != len(l) - 1 else repr(x) for i, x in enumerate(l)])

In [709]: print(string)
'str1\n'
'str2\n'
'str3\n'
'str4'

只需转义换行符或使用 r'...' 原始字符串文字以防止将其解释为转义序列。您可以使用循环来处理除最后添加转义换行符之外的所有内容:

'\n'.join([r"'{}\n'".format(e) for e in l[:-1]] + ["'{}'".format(l[-1])])

演示:

>>> l = ['str1', 'str2', 'str3', 'str4']
>>> '\n'.join([r"'{}\n'".format(e) for e in l[:-1]] + ["'{}'".format(l[-1])])
"'str1\n'\n'str2\n'\n'str3\n'\n'str4'"
>>> print(_)
'str1\n'
'str2\n'
'str3\n'
'str4'

我怀疑你真的只是想显示 Python 字符串,所以它们的表示:

'\n'.join([repr(e + '\n') for e in l[:-1]] + [repr(l[-1])])

对于您的简化输入,这会产生与上述表达式相同的输出:

>>> '\n'.join([repr(e + '\n') for e in l[:-1]] + [repr(l[-1])])
"'str1\n'\n'str2\n'\n'str3\n'\n'str4'"
>>> print(_)
'str1\n'
'str2\n'
'str3\n'
'str4'