파이썬 그룹화 모듈에 대해서 질문드립니다.

조회수 647회
words = ['abc', 'cab', 'cafe', 'goo', 'face']
from itertools import groupby
a = [list(group) for key,group in groupby(sorted(words,key=sorted),sorted)]
print(a)

파이썬에서 anagram을 그룹화하는 모듈을 찾았는데 어떻게 동작하는지 이해가 되지않습니다.

제가 추측한건 정렬된 key값을 기준으로 정렬한 words를 그룹화하는데 이때 그룹화하는것도 정렬한다는건 이해가되는데 어떻게 아나그램인지 확인해서 그것을 그룹화한다는것인지 이해가 되지않습니다.

제가 찾아본 사이트는 https://codeday.me/ko/qa/20190730/1176604.html 입니다.

설명 부탁드립니다! ㅜㅜㅜ

  • groupby 함수 설명뿐입니다. 아나그램인지 여부 확인은 내용에 없습니다. 당연히 다른 주제이고 상기 링크의 내용은 groupby 를 이용해서 그룹화를 할 수 있다는 겁니다. 정영훈 2019.10.7 03:53

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    일단, 문자열 a와 문자열 b 가 anagram 이 가능한지 확인하는 방법은, 각각 문자열을 알파벳순서로 소팅한 결과가 같아야 합니다. (다른 알고리즘도 있을 수 있지만, 가장 잘 알려진 방법이겠습니다.)

    예를 들면, "face", "cafe" 각각을 소팅해보면, 즉, sorted("face") -> "acef" 이고, sorted("cafe") -> "acef" 로 그 결과 같습니다.

    itertools.groupby 는 리스트 원소들을 어떤 조건에 따라, 그룹화하는 함수입니다. 그룹화하는 조건이 두번쩨 인자로, 함수로 주어지네요. 위 예제에서 그룹화 하는 조건이 sorted 함수가 주어진 것입니다. groupby 는 주어진 문자열 리스트의 각 원소에 sorted 를 적용한 값들을 구해보고, 그 값들이 같은 것들을 그룹화해서 결과값을 내어줍니다.

    하지만, 그냥 groupby(words, sorted) 를 해보면, 제대로 되지 않습니다. 그룹화할 리스트를 같은 그룹끼리 연속되게 있도록 정렬이 되어 있어야 한답니다. 그래서, groupby(sorted(words, key=sorted), sotred) 로 주어진 것입니다.

    sorted(words, key=sorted) 도 복잡해 보이는데, words 를 정렬해 주는데, 정렬의 기준이 각 원소에 sorted 를 적용한 값이라는 뜻입니다.

    그리고, 질문할 때 울지 좀 맙시다. 애기들이 너무 많아.

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

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

(ಠ_ಠ)
(ಠ‿ಠ)