How to split a string into a list of characters?

PythonStringList

Python Problem Overview


How do I split a string into a list of characters? str.split does not work.

"foobar"    →    ['f', 'o', 'o', 'b', 'a', 'r']

Python Solutions


Solution 1 - Python

>>> list("foobar")
['f', 'o', 'o', 'b', 'a', 'r']

Use the list constructor.

Solution 2 - Python

You take the string and pass it to list()

s = "mystring"
l = list(s)
print l

Solution 3 - Python

You can also do it in this very simple way without list():

>>> [c for c in "foobar"]
['f', 'o', 'o', 'b', 'a', 'r']

Solution 4 - Python

If you want to process your String one character at a time. you have various options.

uhello = u'Hello\u0020World'

>Using List comprehension:

print([x for x in uhello])

Output:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

>Using map:

print(list(map(lambda c2: c2, uhello)))

Output:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

>Calling Built in list function:

print(list(uhello))

Output:

['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

>Using for loop:

for c in uhello:
    print(c)

Output:

H
e
l
l
o

W
o
r
l
d

Solution 5 - Python

If you just need an array of chars:

arr = list(str)

If you want to split the str by a particular delimiter:

# str = "temp//temps" will will be ['temp', 'temps']
arr = str.split("//")

Solution 6 - Python

I explored another two ways to accomplish this task. It may be helpful for someone.

The first one is easy:

In [25]: a = []
In [26]: s = 'foobar'
In [27]: a += s
In [28]: a
Out[28]: ['f', 'o', 'o', 'b', 'a', 'r']

And the second one use map and lambda function. It may be appropriate for more complex tasks:

In [36]: s = 'foobar12'
In [37]: a = map(lambda c: c, s)
In [38]: a
Out[38]: ['f', 'o', 'o', 'b', 'a', 'r', '1', '2']

For example

# isdigit, isspace or another facilities such as regexp may be used
In [40]: a = map(lambda c: c if c.isalpha() else '', s)
In [41]: a
Out[41]: ['f', 'o', 'o', 'b', 'a', 'r', '', '']

See python docs for more methods

Solution 7 - Python

The task boils down to iterating over characters of the string and collecting them into a list. The most naïve solution would look like

result = []
for character in string:
    result.append(character)

Of course, it can be shortened to just

result = [character for character in string]

but there still are shorter solutions that do the same thing.

list constructor can be used to convert any iterable (iterators, lists, tuples, string etc.) to list.

>>> list('abc')
['a', 'b', 'c']

The big plus is that it works the same in both Python 2 and Python 3.

Also, starting from Python 3.5 (thanks to the awesome [PEP 448](https://www.python.org/dev/peps/pep-0448/ 'Additional Unpacking Generalizations')) it's now possible to build a list from any iterable by unpacking it to an empty list literal:

>>> [*'abc']
['a', 'b', 'c']

This is neater, and in some cases more efficient than calling list constructor directly.

I'd advise against using map-based approaches, because map does not return a list in Python 3. See https://stackoverflow.com/q/13638898/2301450.

Solution 8 - Python

split() inbuilt function will only separate the value on the basis of certain condition but in the single word, it cannot fulfill the condition. So, it can be solved with the help of list(). It internally calls the Array and it will store the value on the basis of an array.

Suppose,

a = "bottle"
a.split() // will only return the word but not split the every single char.

a = "bottle"
list(a) // will separate ['b','o','t','t','l','e']

Solution 9 - Python

Unpack them:

word = "Paralelepipedo"
print([*word])

Solution 10 - Python

To split a string s, the easiest way is to pass it to list(). So,

s = 'abc'
s_l = list(s) #  s_l is now ['a', 'b', 'c']

You can also use a list comprehension, which works but is not as concise as the above:

s_l = [c for c in s]

There are other ways, as well, but these should suffice. Later, if you want to recombine them, a simple call to "".join(s_l) will return your list to all its former glory as a string...

Solution 11 - Python

You can use extend method in list operations as well.

>>> list1 = []
>>> list1.extend('somestring')
>>> list1
['s', 'o', 'm', 'e', 's', 't', 'r', 'i', 'n', 'g']

Solution 12 - Python

If you wish to read only access to the string you can use array notation directly.

Python 2.7.6 (default, Mar 22 2014, 22:59:38) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> t = 'my string'
>>> t[1]
'y'

Could be useful for testing without using regexp. Does the string contain an ending newline?

>>> t[-1] == '\n'
False
>>> t = 'my string\n'
>>> t[-1] == '\n'
True

Solution 13 - Python

from itertools import chain

string = 'your string'
chain(string)

similar to list(string) but returns a generator that is lazily evaluated at point of use, so memory efficient.

Solution 14 - Python

Well, much as I like the list(s) version, here's another more verbose way I found (but it's cool so I thought I'd add it to the fray):

>>> text = "My hovercraft is full of eels"
>>> [text[i] for i in range(len(text))]
['M', 'y', ' ', 'h', 'o', 'v', 'e', 'r', 'c', 'r', 'a', 'f', 't', ' ', 'i', 's', ' ', 'f', 'u', 'l', 'l', ' ', 'o', 'f', ' ', 'e', 'e', 'l', 's']

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAdrianView Question on Stackoverflow
Solution 1 - Pythonuser225312View Answer on Stackoverflow
Solution 2 - PythonSenthil KumaranView Answer on Stackoverflow
Solution 3 - PythonLewis James-OdwinView Answer on Stackoverflow
Solution 4 - PythonSidView Answer on Stackoverflow
Solution 5 - PythonMediumSpringGreenView Answer on Stackoverflow
Solution 6 - PythonAlexey MilogradovView Answer on Stackoverflow
Solution 7 - PythonvaultahView Answer on Stackoverflow
Solution 8 - PythonAnshul Singh SuryanView Answer on Stackoverflow
Solution 9 - PythonenbermudasView Answer on Stackoverflow
Solution 10 - PythonGary02127View Answer on Stackoverflow
Solution 11 - PythonsusheelbhargavkView Answer on Stackoverflow
Solution 12 - PythonSylvainView Answer on Stackoverflow
Solution 13 - PythonminggliView Answer on Stackoverflow
Solution 14 - PythonJohn LockwoodView Answer on Stackoverflow