Python - String to list

前端 未结 5 756
情深已故
情深已故 2021-01-15 00:52

I need cast a list to a string and get back the string to a list. There\'s a python way to make this behavior?

l1 = [\'aa\',\'bb\',\'cc\']
s = str(l1)
l2 = c         


        
相关标签:
5条回答
  • 2021-01-15 00:54

    You can use ast module:

    import ast
    
    l1 = ['aa','bb','cc']
    s = str(l1)
    ast.literal_eval(s)
    >>> ['aa','bb','cc']
    

    Or something like this - but i don't like it too much:

    l1 = ['aa','bb','cc']
    s = str(l1)
    l2 = [x.strip(" '") for x in s.strip('[]').split(',')]
    
    0 讨论(0)
  • 2021-01-15 00:57

    If you are always working with a list, then the following kind of thing should work just fine. Beware, it will not cast ints to ints and such; they will always be string items in the list.

    l1 = ['aa','bb','cc']
    s = str(l1)
    
    l2 = s[1:-1].split(',')
    
    print l2
    ['aa', 'bb', 'cc']
    

    You probably want to check the boundaries of the string and such to check that it's long enough for that array stuff too...

    0 讨论(0)
  • 2021-01-15 01:00

    Use a serialization library like json:

    import json
    
    l1 = ['aa','bb','cc']
    s = json.dumps(l1)
    l2 = json.loads(s)
    
    print s
    print l1 == l2
    
    0 讨论(0)
  • 2021-01-15 01:12

    In somewhat recent Python versions, you can use ast.literal_eval, which is essentially eval without the security problems. You could also try to do the parsing yourself (or use Python's parser and then replicate the logic of literal_eval before evaling the AST), although both are wheel reinventions and the latter is likely much less robust as soon as it gets to string literals.

    Why do you need it anyway? There are serialization formats that can handle conversion to and from string of various data structures (not just lists of strings) for you, such as Pickle (somewhat insecure itself, read the notice in the docs), JSON, YAML, and probably more. They're much more robust and appropriate for such tasks.

    0 讨论(0)
  • 2021-01-15 01:17

    The pickle module is probably what you're looking for:

    import pickle
    l1 = ['aa','bb','cc']
    s = pickle.dumps(l1)
    l2 = pickle.loads(s)
    print l2
    
    0 讨论(0)
提交回复
热议问题