How to convert a string with comma-delimited items to a list in Python?

How do you convert a string into a list?

Say the string is like text = "a,b,c". After the conversion, text == ['a', 'b', 'c'] and hopefully text[0] == 'a', text[1] == 'b'?

0

14 Answers

Like this:

>>> text = 'a,b,c' >>> text = text.split(',') >>> text [ 'a', 'b', 'c' ] 
7

Just to add on to the existing answers: hopefully, you'll encounter something more like this in the future:

>>> word = 'abc' >>> L = list(word) >>> L ['a', 'b', 'c'] >>> ''.join(L) 'abc' 

But what you're dealing with right now, go with @Cameron's answer.

>>> word = 'a,b,c' >>> L = word.split(',') >>> L ['a', 'b', 'c'] >>> ','.join(L) 'a,b,c' 
1

The following Python code will turn your string into a list of strings:

import ast teststr = "['aaa','bbb','ccc']" testarray = ast.literal_eval(teststr) 
2

I don't think you need to

In python you seldom need to convert a string to a list, because strings and lists are very similar

Changing the type

If you really have a string which should be a character array, do this:

In [1]: x = "foobar" In [2]: list(x) Out[2]: ['f', 'o', 'o', 'b', 'a', 'r'] 

Not changing the type

Note that Strings are very much like lists in python

Strings have accessors, like lists

In [3]: x[0] Out[3]: 'f' 

Strings are iterable, like lists

In [4]: for i in range(len(x)): ...: print x[i] ...: f o o b a r 

TLDR

Strings are lists. Almost.

1

In case you want to split by spaces, you can just use .split():

a = 'mary had a little lamb' z = a.split() print z 

Output:

['mary', 'had', 'a', 'little', 'lamb'] 
1

If you actually want arrays:

>>> from array import array >>> text = "a,b,c" >>> text = text.replace(',', '') >>> myarray = array('c', text) >>> myarray array('c', 'abc') >>> myarray[0] 'a' >>> myarray[1] 'b' 

If you do not need arrays, and only want to look by index at your characters, remember a string is an iterable, just like a list except the fact that it is immutable:

>>> text = "a,b,c" >>> text = text.replace(',', '') >>> text[0] 'a' 
5
m = '[[1,2,3],[4,5,6],[7,8,9]]' m= eval(m.split()[0]) [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
1

All answers are good, there is another way of doing, which is list comprehension, see the solution below.

u = "UUUDDD" lst = [x for x in u] 

for comma separated list do the following

u = "U,U,U,D,D,D" lst = [x for x in u.split(',')] 
2

I usually use:

l = [ word.strip() for word in text.split(',') ] 

the strip remove spaces around words.

To convert a string having the form a="[[1, 3], [2, -6]]" I wrote yet not optimized code:

matrixAr = [] mystring = "[[1, 3], [2, -4], [19, -15]]" b=mystring.replace("[[","").replace("]]","") # to remove head [[ and tail ]] for line in b.split('], ['): row =list(map(int,line.split(','))) #map = to convert the number from string (some has also space ) to integer matrixAr.append(row) print matrixAr 

split() is your friend here. I will cover a few aspects of split() that are not covered by other answers.

  • If no arguments are passed to split(), it would split the string based on whitespace characters (space, tab, and newline). Leading and trailing whitespace is ignored. Also, consecutive whitespaces are treated as a single delimiter.

Example:

>>> " \t\t\none two three\t\t\tfour\nfive\n\n".split() ['one', 'two', 'three', 'four', 'five'] 
  • When a single character delimiter is passed, split() behaves quite differently from its default behavior. In this case, leading/trailing delimiters are not ignored, repeating delimiters are not "coalesced" into one either.

Example:

>>> ",,one,two,three,,\n four\tfive".split(',') ['', '', 'one', 'two', 'three', '', '\n four\tfive'] 

So, if stripping of whitespaces is desired while splitting a string based on a non-whitespace delimiter, use this construct:

words = [item.strip() for item in string.split(',')] 
  • When a multi-character string is passed as the delimiter, it is taken as a single delimiter and not as a character class or a set of delimiters.

Example:

>>> "one,two,three,,four".split(',,') ['one,two,three', 'four'] 

To coalesce multiple delimiters into one, you would need to use re.split(regex, string) approach. See the related posts below.


Related

# to strip `,` and `.` from a string -> >>> 'a,b,c.'.translate(None, ',.') 'abc' 

You should use the built-in translate method for strings.

Type help('abc'.translate) at Python shell for more info.

Using functional Python:

text=filter(lambda x:x!=',',map(str,text)) 

Example 1

>>> email= "" >>> email.split() #OUTPUT [""] 

Example 2

>>> email= ", " >>> email.split(',') #OUTPUT ["", ""] 

You Might Also Like