gpt4 book ai didi

Python 字符串连接成语。需要澄清。

转载 作者:太空狗 更新时间:2023-10-30 01:39:59 24 4
gpt4 key购买 nike

来自 http://jaynes.colorado.edu/PythonIdioms.html

"Build strings as a list and use''.join at the end. join is a stringmethod called on the separator, notthe list. Calling it from the emptystring concatenates the pieces with noseparator, which is a Python quirk andrather surprising at first. This isimportant: string building with + isquadratic time instead of linear! Ifyou learn one idiom, learn this one.

Wrong: for s in strings: result += s

Right: result = ''.join(strings)"

我不确定为什么这是真的。如果我有一些字符串,我想加入它们,对我来说,将它们放在列表中然后调用 ''.join 对我来说直观上并不是更好。将它们放入列表中不会产生一些开销吗?澄清...

Python 命令行:

>>> str1 = 'Not'
>>> str2 = 'Cool'
>>> str3 = ''.join([str1, ' ', str2]) #The more efficient way **A**
>>> print str3
Not Cool
>>> str3 = str1 + ' ' + str2 #The bad way **B**
>>> print str3
Not Cool

A真的是线性时间而B是二次时间吗?

最佳答案

是的。对于您选择的示例,重要性并不明确,因为您只有两个非常短的字符串,因此追加可能会更快。

但是每次你在 Python 中对字符串执行 a + b 时,它都会导致新的分配,然后将 a 和 b 中的所有字节复制到新字符串中。如果您在包含大量字符串的循环中执行此操作,则必须一次又一次地复制这些字节,并且每次复制的数量都会变长。这给出了二次行为。

另一方面,创建字符串列表不会复制字符串的内容——它只是复制引用。这是非常快的,并且以线性时间运行。然后 join 方法只进行一次内存分配,并将每个字符串复制到正确的位置一次。这也只需要线性时间。

所以是的,如果您可能要处理大量字符串,请务必使用 ''.join 习惯用法。对于两个字符串,这无关紧要。

如果您需要更有说服力,请自己尝试创建一个包含 1000 万个字符的字符串:

>>> chars = ['a'] * 10000000
>>> r = ''
>>> for c in chars: r += c
>>> print len(r)

相比于:

>>> chars = ['a'] * 10000000
>>> r = ''.join(chars)
>>> print len(r)

第一种方法大约需要 10 秒。第二个需要不到 1 秒。

关于Python 字符串连接成语。需要澄清。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1967723/

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