首页 > 解决方案 > Python:为什么将数组转换为以换行符作为分隔符的唯一字符串如此困难?

问题描述

我有一个这样的数组:

names = [ 'John', 'Mary', 'Mike' ]

我需要实例化一个新字符串,每个名称由一个新行分隔\n

我已经尝试过joined_string = '\n'.join(names)但没有成功。另一种尝试是使用 F-String (甚至是普通的字符串连接+"%s\n" % (name)

joined_string = ""
for name in names:
    joined_string += f"{name}\n"

我所有的测试,总是给出这样的输出

John\nMary\nMike

所需的输出是这样的新字符串:

joined_string = '''John
Mary
Mike
'''

我需要内容在变量中,而不需要使用print语句。

编辑:我在 Python 3.6 中运行的实际代码

names = ['John', 'Mary', 'Mike']
joined_string = '\n'.join(names)
print(joined_string)

控制台输出给出: John\nMary\nMike

预期输出:

John
Mary
Mike

我知道这看起来很奇怪,但我的 Python 3.6 给出了那个输出。

对于那些不相信的人:

在此处输入图像描述

标签: pythonarraysstring

解决方案


您将字符串的字符串表示与字符串本身混淆了。

>>> str1 = "\n".join(["John", "Mary", "Mike"])
>>> str2 = """John
... Mary
... Mike"""
>>> str1 == str2
True

当你使用

>>> "\n".join(["John", "Mary", "Mike"])
'John\nMary\nMike'

您将看到 Python 的str值表示:引号定界但不是字符串的一部分,并且\n只是str.__repr__用于显示换行符的视觉表示。当你使用

>>> print("\n".join(["John", "Mary", "Mike"]))
John
Mary
Mike

您没有使用 更改print您只是将每个字符写入终端,终端通过将光标移动到下一行的开头而不是显示任何特定的可见字符来“显示”换行符。


推荐阅读