【发布时间】:2015-12-04 09:33:17
【问题描述】:
join() 函数接受一个可迭代对象作为参数。但是,我想知道为什么要:
text = 'asdfqwer'
这个:
''.join([c for c in text])
明显快于:
''.join(c for c in text)
长字符串(即text * 10000000)也是如此。
观察两个长字符串执行的内存占用情况,我认为它们都在内存中创建了一个且只有一个字符列表,然后将它们连接成一个字符串。所以我猜想也许区别仅在于join() 如何从生成器中创建这个列表,以及Python 解释器在看到[c for c in text] 时如何做同样的事情。但是,我只是在猜测,所以我希望有人确认/否认我的猜测。
【问题讨论】:
-
@AvinashRaj:你在哪里看到元组?
-
@Matthias ya,被错误地称为元组而不是生成器。
-
有趣的是,列表在我的系统上也比直接遍历字符串更快:
''.join(text) -
亲眼看看:
python -m timeit 'text = "asdfqwer" * 10000000; "".join([c for c in text])'(也没有[])。我用列表得到2.04 sec per loop,用生成器得到2.9 sec per loop。