파이썬) 리스트로 새로운 리스트 만들기

조회수 3247회

names = [["Joe", "Smith"], ["Mary", "Smith"], ["Pete", "Smith"], ["Lily", "Smith"], ["Heinz", "Maus"], ["Brigita", "Maus"], ["Juergen", "Maus"], ["Jean", "St. Croix"], ["sophie", "St. Croix"]]

이 배열을 가지고

last_name_list = [['St. Croix', 해당 성을 가진 사람들의 숫자, ['sophie', 'Jean']], ... ] 이런 식으로 앞에 성, 가운데에는 그 성을 가진 사람들의 숫자, 뒤에는 같은 성을 가진 사람의 이름들을 나열하는 배열을 만드는 코드.. 도무지 생각이 안떠오르네요..

도와주세요!! ㅜㅜ

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 코딩을 시작하시기 전에 먼저 손으로 자료구조를 그려보세요.

    연습장에 위와 같이 사람 목록이 있다면 어떻게 목적대로 만들어 낼 수 있을지를 먼저 그려보시고 그 내용을 코드로 옮기시면 쉽게 해결 가능하실 겁니다.

    주석으로 설명을 달아놨습니다.

    names = [
      ["Joe", "Smith"], ["Mary", "Smith"], 
      ["Pete", "Smith"], ["Lily", "Smith"], 
      ["Heinz", "Maus"], ["Brigita", "Maus"], 
      ["Juergen", "Maus"], ["Jean", "St. Croix"], 
      ["sophie", "St. Croix"]
    ]
    
    last_name_dict = {} # 성이 같은 사람끼리 모으기 위한 사전
    for first_name, last_name in names: # 이름을 순회하면서
      if last_name not in last_name_dict: # 사전에 해당 성이 없다면
        last_name_dict[last_name] = [] # 사전에 해당 성을 key로 해서 빈 목록을 넣어준다.
    
      last_name_dict[last_name].append(first_name) # 해당 성에 엮여있는 목록에 같은 이름을 넣어준다.
    
    last_name_list = [] # 출력용 목록
    for last_name, first_names in last_name_dict.items(): # 위에서 모아준 사전을 순회하면서
      item = [last_name, len(first_names), first_names] # 성, 사람 수, 이름 목록을 만든다.
      last_name_list.append(item)  # 목록에 추가.
    
    print(last_name_list) 
    
    # [['St. Croix', 2, ['Jean', 'sophie']], ['Maus', 3, ['Heinz', 'Brigita', 'Juergen']], ['Smith', 4, ['Joe', 'Mary', 'Pete', 'Lily']]]
    
    

    아래 링크에서 시작하는데 도움이 되는 내용을 많이 찾으실 수 있을것 같습니다.

    http://interactivepython.org/runestone/static/thinkcspy/index.html

    • (•́ ✖ •̀)
      알 수 없는 사용자

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

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

(ಠ_ಠ)
(ಠ‿ಠ)