前言:这与Create lines of text, '\n'.join(my_list) is missing trailing newline :-(类似,只是这里它是一个生成器,而不是一个列表。你知道吗
我需要从一个生成器函数生成一个文本文件,该函数生成的字符串行不是以行结尾的。你知道吗
我相信构建这样一个字符串的推荐方法是(假设g
是generator对象)
'\n'.join(g)
但是,这将错过后面的换行符。你知道吗
下面是一个使用','
而不是'\n'
的示例:
>>> g=(str(i) for i in range(0,10))
>>> ','.join(g)
'0,1,2,3,4,5,6,7,8,9'
当然,我可以在最后手动创建一个+ '\n'
,但我相信这可能会很昂贵。你知道吗
我尝试使用itertools.chain()
附加一个空字符串,但得到了令人惊讶的结果:
>>> import itertools
>>> g=itertools.chain((str(i) for i in range(0,10)),'')
>>> ','.join(g)
'0,1,2,3,4,5,6,7,8,9'
我该怎么做呢?+ '\n'
真的那么贵吗?你知道吗
听到这个消息您可能会感到惊讶,但是将生成器转换为一个列表、附加空(
""
)值并使用str.join
将是最快的方法。你知道吗我喜欢你的想法,你希望它更有效地使用生成器,但是
"".join
实际上是在加入之前将genexp内部转换成一个列表。之所以这样做是因为它需要测量最后一个字符串的长度并相应地分配内存。这样,它会在生成器上进行两次传递(基本上是创建一个列表以便临时保存值)同样的记忆。你知道吗
相关问题 更多 >
编程相关推荐