Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to cast string back into a list

I have a list:

ab = [1, 2, a, b, c]

I did:

strab = str(ab).

So strab is now a string.

I want to cast that string back into a list.

How can I do that?

like image 978
Nayana Avatar asked Jul 21 '13 02:07

Nayana


3 Answers

The easiest and safest way would be to use ast.literal_eval():

import ast

ab = [1, 2, 'a', 'b', 'c']    # a list
strab = str(ab)               # the string representation of a list
strab
=> "[1, 2, 'a', 'b', 'c']"

lst = ast.literal_eval(strab) # convert string representation back to list
lst
=> [1, 2, 'a', 'b', 'c']

ab == lst                     # sanity check: are they equal?
=> True                       # of course they are!

Notice that calling eval() also works, but it's not safe and you should not use it:

eval(strab)
=> [1, 2, 'a', 'b', 'c']
like image 128
Óscar López Avatar answered Oct 27 '22 21:10

Óscar López


Use the ast package:

import ast
lst = ast.literal_eval(strab)
like image 44
David Robinson Avatar answered Oct 27 '22 23:10

David Robinson


In the context of setting a numpy array element with a sequence, you can use the built-in join to bypass setting it to a string:

str_list_obj = '-'.join(list_obj)

and afterwards when needed split the string sequence again with the same connector (provided it does not appear in the list's strings):

og_list_obj = str_list_obj.split("-")

like image 43
Jordy Van Landeghem Avatar answered Oct 27 '22 22:10

Jordy Van Landeghem