如果我有一个字符列表:

a = ['a','b','c','d']

如何将其转换为单个字符串?

a = 'abcd'

当前回答

除了str.join这一最自然的方式外,还可以使用io。StringIO和滥用writline一次性写入所有元素:

import io

a = ['a','b','c','d']

out = io.StringIO()
out.writelines(a)
print(out.getvalue())

打印:

abcd

当将这种方法用于生成器函数或非元组或列表的iterable时,它省去了join所创建的临时列表,以便一次性分配正确的大小(并且一个由1个字符的字符串组成的列表非常消耗内存)。

如果内存较低,并且有一个惰性求值对象作为输入,那么这种方法是最佳解决方案。

其他回答

如果你的Python解释器是旧的(例如1.5.2,这在一些旧的Linux发行版上很常见),你可能没有join()作为任何旧字符串对象的方法,你将需要使用string模块。例子:

a = ['a', 'b', 'c', 'd']

try:
    b = ''.join(a)

except AttributeError:
    import string
    b = string.join(a, '')

字符串b将是'abcd'。

h = ['a','b','c','d','e','f']
g = ''
for f in h:
    g = g + f

>>> g
'abcdef'

如果列表中包含数字,则可以使用map()和join()。

Eg:

>>> arr = [3, 30, 34, 5, 9]
>>> ''.join(map(str, arr))
3303459

你也可以像这样使用operator.concat():

>>> from operator import concat
>>> a = ['a', 'b', 'c', 'd']
>>> reduce(concat, a)
'abcd'

如果你使用的是python3,你需要前置:

>>> from functools import reduce

因为内置的reduce()已经从Python 3中移除,现在存在于functools.reduce()中。

除了str.join这一最自然的方式外,还可以使用io。StringIO和滥用writline一次性写入所有元素:

import io

a = ['a','b','c','d']

out = io.StringIO()
out.writelines(a)
print(out.getvalue())

打印:

abcd

当将这种方法用于生成器函数或非元组或列表的iterable时,它省去了join所创建的临时列表,以便一次性分配正确的大小(并且一个由1个字符的字符串组成的列表非常消耗内存)。

如果内存较低,并且有一个惰性求值对象作为输入,那么这种方法是最佳解决方案。