이중리스트 flatten하기

조회수 518회
['[ abc, def ]', '[ ghi, abc ]', '[ def ]']

위와 같은 이중리스트를 1차원리스트로 바꾸고 싶어요

즉,

['abc', 'def', 'ghi']

위와 같이 변환하고싶습니다.

itertools 사용해서 변환하니

['a', 'b', 'c', 'd', 'e', 'g', 'h', 'i']

이런식으로 모두 쪼개어져 나오네요 ㅠㅠ

방법이 있을까요

  • ['[ abc, def ]', '[ ghi, abc ]', '[ def ]'] 를 어떻게 만들었어요? 그 부분 만드는 것부터 고쳐야 좋을 것 같군요. nowp 2020.2.6 13:15
  • blablablabla [ abc, def ] blablablabla [ ghi, abc ] blabla [ def ] 이렇게 되있는 문장(?)에서 대괄호에 있는 부분만 추출하려고 정규식 findall 사용해서 대괄호[ ] 로 묶인부분을 추출해서 새 리스트에 append 했더니 저렇게 나왔습니다. 김한나 2020.2.6 14:05

1 답변

  • 좋아요

    3

    싫어요
    채택 취소하기

    먼저 ['[ abc, def ]', '[ ghi, abc ]', '[ def ]'] 은 2중 리스트가 아니고 문자열의 리스트입니다.

    제 생각에는 아래와 같은 조건에서 결과를 원한 것 아닌가 싶습니다.

    L = [['abc', 'def'], ['ghi', 'abc'], ['def']]
    
    import itertools as it 
    
    set(it.chain(*L))                                                      
    {'abc', 'def', 'ghi'}
    

    만약 조건이 ['[ abc, def ]', '[ ghi, abc ]', '[ def ]'] 였다면 정규식등을 이용해서 2중 리스트로 만들어서 작업해야 합니다.

    import re
    
    L = ['[ abc, def ]', '[ ghi, abc ]', '[ def ]']
    L2 = [re.findall(r'(\w+)[,]?', s) for s in L]
    
    import itertools as it 
    
    set(it.chain(*L2))
    
    • 정말 감사합니다. 덕분에 해결했습니다. 김한나 2020.2.6 16:23

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

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

(ಠ_ಠ)
(ಠ‿ಠ)