Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 문자열이 반복되는지 확인하는 방법

파이썬 프로그래밍을 하다 보면 주어진 문자열이 특정 부분 문자열의 반복으로만 이루어져 있는지 확인해야 하는 경우가 있습니다. 예를 들어 '012012012'처럼 '012'가 여러 번 반복된 형태인지 판별하는 것이죠.

문자열 반복(주기성) 검사의 원리

이를 확인하는 가장 간단한 방법은 문자열을 두 번 이어 붙인 결과(s+s) 안에서 원래 문자열의 회전(rotation)이 존재하는지 검사하는 것입니다.

그 이유는 다음과 같습니다. 어떤 문자열이 주기적(periodic)이라는 것은, 그 문자열이 자기 자신의 '사소하지 않은(nontrivial) 회전'과 동일하다는 조건과 정확히 일치하기 때문입니다. 따라서 (s+s)에서 인덱스 1부터 끝 바로 앞까지의 범위 내에 s가 다시 등장한다면, 해당 위치를 기준으로 반복 단위를 구할 수 있습니다.

예제 코드

다음 코드는 위 원리를 활용해 문자열의 반복 단위를 찾아 반환합니다:

def find_period(s):
    # 문자열을 두 번 이어 붙인 뒤,
    # 인덱스 1부터 끝-1 범위에서 s를 찾습니다
    i = (s + s).find(s, 1, -1)
    return None if i == -1 else s[:i]

print(find_period('012012012012012'))
print(find_period('some random string'))

실행 결과

위 코드를 실행하면 다음과 같은 출력을 얻을 수 있습니다:

012
None

결과 해석

첫 번째 문자열 '012012012012012''012'가 다섯 번 반복된 형태이므로 반복 단위인 '012'가 반환됩니다. 반면 두 번째 문자열 'some random string'은 일정한 패턴의 반복으로 이루어져 있지 않으므로 None이 반환됩니다.

이 방법은 별도의 외부 라이브러리 없이 파이썬 기본 문자열 메서드만으로 문자열의 주기성을 손쉽게 판별할 수 있다는 장점이 있습니다.