If I have a list of chars:
a = ['a','b','c','d']
How do I convert it into a single string?
a = 'abcd'
join method of the empty string to join all of the strings together with the empty string in between, like so:
>>> a = ['a', 'b', 'c', 'd'] >>> ''.join(a) 'abcd'
>>> ['a', 'b', 'c'].join('') Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'list' object has no attribute 'join'
Strange enough, in Python the
join method is on the
# this is the Python way "".join(['a','b','c','d'])
join is not a method in the
str.join(list) method means: join the list into a new string using
str as a separator (in this case
str is an empty string).
Somehow I got to love this way of thinking after a while. I can complain about a lot of things in Python design, but not about its coherence.
This may be the fastest way:
>> from array import array >> a = ['a','b','c','d'] >> array('B', map(ord,a)).tostring() 'abcd'
h = ['a','b','c','d','e','f'] g = '' for f in h: g = g + f >>> g 'abcdef'
If your Python interpreter is old (1.5.2, for example, which is common on some older Linux distributions), you may not have
join() available as a method on any old string object, and you will instead need to use the string module. Example:
a = ['a', 'b', 'c', 'd'] try: b = ''.join(a) except AttributeError: import string b = string.join(a, '')
b will be
The reduce function also works
import operator h=['a','b','c','d'] reduce(operator.add, h) 'abcd'
You could also use
operator.concat() like this:
>>> from operator import concat >>> a = ['a', 'b', 'c', 'd'] >>> reduce(concat, a) 'abcd'
If you’re using Python 3 you need to prepend:
>>> from functools import reduce
since the builtin
reduce() has been removed from Python 3 and now lives in
If the list contains numbers, you can use
>>> arr = [3, 30, 34, 5, 9] >>> ''.join(map(str, arr)) 3303459
str.join which is the most natural way, a possibility is to use
io.StringIO and abusing
writelines to write all elements in one go:
import io a = ['a','b','c','d'] out = io.StringIO() out.writelines(a) print(out.getvalue())
When using this approach with a generator function or an iterable which isn’t a
tuple or a
list, it saves the temporary list creation that
join does to allocate the right size in one go (and a list of 1-character strings is very expensive memory-wise).
If you’re low in memory and you have a lazily-evaluated object as input, this approach is the best solution.