gpt4 book ai didi

Python:更好地理解迭代器和 `join()`

转载 作者:太空狗 更新时间:2023-10-29 18:29:34 25 4
gpt4 key购买 nike

join() 函数接受一个可迭代对象作为参数。但是,我想知道为什么有:

text = 'asdfqwer'

这个:

''.join([c for c in text])

明显快于:

''.join(c for c in text)

对于长字符串(即 text * 10000000)也是如此。

观察两个长字符串执行的内存占用,我认为它们都在内存中创建一个且只有一个字符列表,然后将它们连接成一个字符串。所以我猜也许区别仅在于 join() 如何从生成器中创建此列表以及 Python 解释器在看到 [c for c in text] 时如何做同样的事情。但是,再次重申,我只是在猜测,所以我希望有人能证实/否定我的猜测。

最佳答案

join 方法读取它的输入两次;一次确定为结果字符串对象分配多少内存,然后再次执行实际的连接。传递一个列表比传递一个生成器对象要快,生成器对象需要生成一个副本以便迭代两次。

列表理解不仅仅是一个包含在列表中的生成器对象,因此在外部构建列表比让 join 从生成器对象创建它更快。生成器对象针对内存效率而非速度进行了优化。

当然,字符串已经是一个可迭代的对象,所以你可以只写''.join(text)。 (同样,这不如从字符串显式创建列表快。)

关于Python:更好地理解迭代器和 `join()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32462194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com