如何最优地将字符列表连接到字符串?

5
数据如下:
list = ['a','b','x','d','s']

我希望创建一个字符串 str = "abxds",该如何操作?

目前我正在尝试以下代码:

str = ""
for i in list:
    str = str + i
print(str)

我知道在Python中字符串是不可变的,这会创建7个字符串对象。当我执行数千次时,这会超出我的内存限制。
有没有更有效的方法来做到这一点?

2
你应该避免使用“list”作为列表的名称,因为“list”是一个内置函数(同样适用于“str”)。 - Noah
1
在Python中,str对象是不可变的,这就是为什么它为每个拼接操作创建一个新的str对象。 - Chinmay Kanchi
对不起,打错了。字符串是不可变的。 - rda3mon
@Naoh:我不会使用列表或字符串。 - rda3mon
3个回答

14
>>> theListOfChars = ['a', 'b', 'x', 'd', 's']
>>> ''.join(theListOfChars)
'abxds'

顺便提一句,不要使用liststr作为变量名,因为它们已经是Python内置函数的名称了。

(另外,在Python中没有char。一个“字符”只是长度为1的字符串。所以''.join方法也适用于字符串列表。)


这是目前最有效的方法吗? - rda3mon
速度差异: 无连接:1.01871395111 有连接:0.609759092331 - rda3mon
抱歉,我无法理解您的意思。您是指我可以将其他代码嵌入其中并使其更快? - rda3mon
@Ringo:是的,你可以制作一个特定的C接口,但这样做会很混乱,并且与使用' ''.join相比没有太大的收益。 - kennytm
2
你应该使用.join()。如果你的代码仍然不够快,那就对它进行性能分析。如果.join()被证明是瓶颈,那么再考虑编写一个C模块来替换它。如果你可以假设列表的内容是单个ASCII字符,那么C版本确实可能比.join()快得多。 - kindall

4

KennyTM的回答很好。此外,如果您想将它们变成逗号分隔或其他格式,可以这样做:

",".join(characterlist)

这将导致结果为“a,b,x,d,s”。

2
你要找的东西是 str.join()
>>> L = ['a','b','x','d','s']
>>> ''.join(L)
'abxds'

不要把你的变量命名为list,这是一个内置名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接