Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

주어진 목록의 Python 그룹 아나그램

<시간/>

이 튜토리얼에서는 목록의 모든 아나그램을 그룹화하는 프로그램을 작성할 것입니다. 먼저 애너그램이 무엇인지 알아보겠습니다. .

같은 문자가 다른 순서로 포함된 두 문자열을 아나그램이라고 합니다.

솔루션에 대해 알아보기 전에 예를 살펴보겠습니다.

입력

['cat', 'dog', 'fired', 'god', 'pat', 'tap', 'fried', 'tac']

출력

[['cat', 'tac'], ['dog', 'god'], ['fried', 'fired'], ['pat', 'tap']]

우리는 문제를 두 부분으로 나눌 것입니다. 먼저 두 문자열이 아나그램인지 확인하는 함수를 작성합니다. 아래 단계에 따라 아나그램을 확인하는 코드를 작성하십시오.

  • 문자열을 초기화합니다.
  • 두 문자열을 모두 정렬합니다.
  • 정렬된 두 문자열이 모두 같으면 True를 반환합니다. else 거짓 .

예시

# simple lambda function to check whether two strings are anagrams or not
are_anagrams = lambda x, y: str(sorted(x.lower())) == str(sorted(y.lower()))
# calling the function
print(are_anagrams('cat', 'tac'))
print(are_anagrams('cat', 'Tac'))
print(are_anagrams('cat', 'dog'))

출력

위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

True
True
False

이제 우리는 두 문자열이 아나그램인지 아닌지 확인하는 방법을 알고 있습니다. 그러나 그것만으로는 우리의 문제를 해결할 수 없습니다. 목록의 모든 아나그램을 하위 목록으로 그룹화(저장)해야 합니다.

문제를 어떻게 해결할 수 있습니까?

사전을 사용하여 요소를 그룹화하는 것이 가장 좋습니다. 관련 아나그램에 대한 단일 키가 있습니다. Python을 처음 사용하는 경우 약간 혼란스럽습니다. 원하는 것을 달성하기 위한 단계를 살펴보겠습니다.

  • 문자열 목록을 초기화합니다.
  • 빈 사전을 초기화합니다.
  • 목록을 반복합니다.
    • 문자열을 정렬합니다.
    • 사전에 있는지 확인하세요.

      • 사전에 존재하는 경우 문자열을 목록에 추가합니다.
    • 그렇지 않으면 아나그램을 저장할 현재 문자열을 포함하는 목록으로 키를 초기화합니다.
  • 사전의 모든 값을 목록으로 인쇄합니다.

예시

# initialzing a list of strings
anagrams = ['cat', 'dog', 'fired', 'god', 'pat', 'tap', 'fried', 'tac']
# initializing an empty dict
grouped_anagrams = {}
# iterating over the list to group all anagrams
for string in anagrams:
   # sorting the string
   sorted_string = str(sorted(string))
   # checking the string in dict
   if sorted_string in grouped_anagrams:
      # adding the string to the group anagrams
      grouped_anagrams[sorted_string].append(string)
      else:
         # initializing a list with current string
         grouped_anagrams[sorted_string] = [string]
# printing the values of the dict (anagram groups)
print(list(grouped_anagrams.values()))

출력

위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

[['dog', 'god'], ['pat', 'tap'], ['cat', 'tac'], ['fired', 'fried']]

결론

다른 접근 방식을 사용하여 문제를 해결할 수도 있습니다. defaultdict라는 데이터 구조가 있습니다. 사전에서 키를 확인하는 것을 방지하는 데 도움이 됩니다. 탐색하고 그에 따라 코드를 변경할 수 있습니다.

튜토리얼에서 의문점이 있으면 댓글 섹션에 언급하세요.