list -> str -> list로 변환이 가능할까요?

조회수 3061회

제가 부득이하게 list를 str로 바꿔야 하는데... str로 바꾼 데이터는 다시 list로 (똑같이) 못 만들겠더라구요. 이렇게 할 수 있는 방법이 있나요? (지금 split이랑 slicing등 온갖 지저분하게 해서 비슷하게 만들어서 처리하고는 있는데 결국, 따옴표 등의 문제로 마지막에서 해결이 안되고 있습니다..)

예를 들어드리면

s = [1,2,3,4]
a = str(s)
k = list(a)

이렇게 하고 k를 출력해보면 ['[', '1', ',', ' ', '2', ',', ' ', '3', ',', ' ', '4', ']'] 이렇게 나옵니다.

이게 원래 상태인 [1,2,3,4] 이렇게 나오게 만들 방법은 전혀 없는 걸까요?


제가 질문을 잘못 ... 한 셈인데

s = [1,2,3,4]로 예를 들었지만, 실제 데이터는

s = ['Users/Loggs/ID/OK', 20, 5, '2020-02-12 11:28:09', '2020-02-12 11:28:22', '0:00:13', 
                     '/', 49, 5, '2020-02-14 12:35:54', '2020-02-14 12:35:54', '0:00:00', '/']

대개 이런 식으로 뒤죽박죽 입니다...

5 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    list를 str로 결합하고, 다시 list 형식으로 바꾸는 코드입니다.

    eval()은 str 형식의 문자를 파이썬 코드로서 실행해 주는 함수입니다.

    k = ['[', '1', ',', ' ', '2', ',', ' ', '3', ',', ' ', '4', ']']
    print(eval(''.join(k)))  # [1, 2, 3, 4]
    

    설명이 잘 안 되네요ㅠㅅㅠ

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • import re
    s = [1, 2, 3, 4]
    a = str(s)
    pat = re.compile("[0-9]")
    k = list(map(int, pat.findall(a)))
    

    정규식으로 숫자만 찾아서 하는 방식인데 이런식은 어떨까요?

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 새로운 방법을 배우게 해주셔서 감사합니다. 근데 아쉽게도.. 제가 실제 쓰는 것은 시간, 날짜, 문자도 뒤섞여 있네요... 감사합니다.! 반시 2020.3.2 09:37
  • k = map(int, a[1:-1].split(', '))
    

    대괄호를 없애고 ,를 기준으로 잘라 리스트로 만든 다음 int로 변환해주면 될 것 같습니다.

    그밖에도 여러가지 방법이 있네요...!

    https://www.geeksforgeeks.org/python-convert-a-string-representation-of-list-into-list/

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • 위에도 언급되어 있지만 eval 함수로 파이썬 문장을 바로 수행할 수 있습니다.

    In [1]: s = [1,2,3,4]                                                           
    
    In [2]: a = str(s)                                                              
    
    In [3]: a                                                                       
    Out[3]: '[1, 2, 3, 4]'
    
    In [4]: l = eval(a)                                                             
    
    In [5]: l                                                                       
    Out[5]: [1, 2, 3, 4]
    
  • 주신 실사용예는 문자열로 바꾸었다가 다시 리스트로 바꾸기에는 너무 복잡하네요.

    근본적인 질문을 해야 할 것 같습니다.

    왜 리스트를 문자열로 변환하여야 하나?

    저장을 위한 것이라면, 그냥 리스트 형태를 유지하면서 저장할 수 있습니다. 다른 이유라도, 구지 문자열 변환을 하지 않는 방법을 찾는 것이 가장 좋은 방법으로 생각됩니다.

    왜 문자열로 변환하나요?

    • 소켓으로 보내려면 무조건 문자열 형태여야 하기에 리스트 형태를 유지한 상태로 문자열로 만들고자 했던 것입니다. (사실 리스트 안에 decimal, float, datetime등 지 멋대로 데이터가 다 섞여있어서요..) 저 데이터를 단순 저장이 아닌 네트워크 통신의 signal및 데이터로 사용하려 했던 것입니다. 다만, 단순히 str처리를 해서 변경 후 eval 하면 되는 것 알게 되었습니다. 반시 2020.3.11 16:38

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)