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


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']], ... ] 이런 식으로 앞에 성, 가운데에는 그 성을 가진 사람들의 숫자, 뒤에는 같은 성을 가진 사람의 이름들을 나열하는 배열을 만드는 코드.. 도무지 생각이 안떠오르네요..

도와주세요!! ㅜㅜ

  • 2016년 10월 05일에 작성됨
    프로그래머가 되고싶은 1人

조회수 113


1 답변


좋아요
0
싫어요
채택취소하기

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

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

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

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

  • 2016년 10월 06일에 작성됨
    프로그래밍 언어를 좋아하는 프로그래머

  • 감사합니다! 많은 도움이 되었습니다.    Francis Shin   2016.10.6 19:36     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close