7

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?

Óscar López
  • 232,561
  • 37
  • 312
  • 386
Nayana
  • 1,513
  • 3
  • 24
  • 39

3 Answers3

19

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']
Community
  • 1
  • 1
Óscar López
  • 232,561
  • 37
  • 312
  • 386
6

Use the ast package:

import ast
lst = ast.literal_eval(strab)
David Robinson
  • 77,383
  • 16
  • 167
  • 187
1

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("-")