【发布时间】:2016-04-15 09:36:47
【问题描述】:
我想将 N 个字符串加入到新字符串中。每个项目一行:
my_list=['one', 'two', 'three']
lines='\n'.join(my_list)
不幸的是,我需要在lines 的每一行末尾添加一个尾随换行符。在上述解决方案中,最后一行缺少换行符。
我搜索一个简单且对新手友好的解决方案。
...我使用 Python 2.7
【问题讨论】:
我想将 N 个字符串加入到新字符串中。每个项目一行:
my_list=['one', 'two', 'three']
lines='\n'.join(my_list)
不幸的是,我需要在lines 的每一行末尾添加一个尾随换行符。在上述解决方案中,最后一行缺少换行符。
我搜索一个简单且对新手友好的解决方案。
...我使用 Python 2.7
【问题讨论】:
只需像这样添加另一个\n(因为join()的输出也是一个字符串):
my_list=['one', 'two', 'three']
print '\n'.join(my_list)+'\n'
【讨论】:
除了手动添加到 join 的返回值之外,您还可以(也可以手动)将空字符串附加到列表中。
>>> my_list=['one', 'two', 'three']
>>> my_list.append('')
>>> '\n'.join(my_list)
'one\ntwo\nthree\n'
【讨论】:
'\n'.join(my_list)+'\n' 更有效率,但是由于当不可变对象只有一个引用时python 会作弊,它通常效率较低。附加方式在我的机器上慢了大约 25%并且,与 '\n' 相比,添加 '' 的原因并不明显。
s= b'some-non-constant-string'.decode(); s = s + 'some string' 看到直接的证据。比较之前和之后的id(s) 的值,注意它们是相同的。如果您使用字符串文字初始化 s,那么 id 会有所不同。该实现跨越代码的一部分。第一名是Objects/unicodeobject.c:PyUnicode_append和unicode_modifiable。第二个是Python/ceval.c:unicode_concatenate,如果s = s + t或s += t被调用,就会被调用。如果没有这个,PyUnicode_Append 中的条件将永远不会触发。
str.__add__ 的实现。如果您对str 进行子类化,那么当您将子类实例添加在一起时会调用它。如果 PyUnicode_Append 检测到 + 的两个操作数都具有 str 类型,则它是解释器的微优化。
之前使用打印,它可以工作:
>>> print '\n'.join(ls)
one
two
three
>>>
检查this answer 以了解有关字符串和字符串表示的差异的详细信息,如提到的here。
Here也一样,你可以找到解决办法。
【讨论】:
print() 没有帮助。