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

Python – 접두사를 기준으로 문자열 리스트 분할하는 방법

파이썬에서 특정 접두사(prefix)가 나타나는 지점을 기준으로 문자열 리스트를 분할해야 하는 경우가 있습니다. 이럴 때는 두 개의 빈 리스트를 정의하고, 접두사 값을 설정한 뒤, 간단한 반복문과 append 메서드를 활용하여 원하는 결과를 얻을 수 있습니다.

예제 코드

아래는 접두사를 기준으로 리스트를 분할하는 전체 예제입니다.

from itertools import zip_longest

my_list = ["hi", 'hello', 'there', "python", "object", "oriented", "object", "cool", "language", 'py', 'extension', 'bjarne']

print("리스트 출력 : ")
print(my_list)

my_prefix = "python"
print("접두사 출력 :")
print(my_prefix)

my_result, my_temp_val = [], []

for x, y in zip_longest(my_list, my_list[1:]):
   my_temp_val.append(x)
   if y and y.startswith(my_prefix):
      my_result.append(my_temp_val)
      my_temp_val = []

my_result.append(my_temp_val)

print("분할 결과 : ")
print(my_result)

print("정렬 후 리스트 : ")
my_result.sort()
print(my_result)

실행 결과

리스트 출력 :
['hi', 'hello', 'there', 'python', 'object', 'oriented', 'object', 'cool', 'language', 'py', 'extension', 'bjarne']
접두사 출력 :
python
분할 결과 :
[['hi', 'hello', 'there'], ['python', 'object', 'oriented', 'object', 'cool', 'language', 'py', 'extension', 'bjarne']]
정렬 후 리스트 :
[['hi', 'hello', 'there'], ['python', 'object', 'oriented', 'object', 'cool', 'language', 'py', 'extension', 'bjarne']]

코드 설명

  • 필요한 패키지(itertoolszip_longest)를 환경에 임포트합니다.
  • 문자열로 구성된 리스트를 정의하고 콘솔에 출력합니다.
  • 기준이 될 접두사 값을 정의하고 콘솔에 함께 표시합니다.
  • 결과를 저장할 리스트와 임시 값을 저장할 리스트, 두 개의 빈 리스트를 생성합니다.
  • zip_longest 메서드를 사용하면 원본 리스트와 첫 번째 요소를 제외한 동일한 리스트를 짝지어 순회할 수 있습니다. 이를 통해 현재 요소와 다음 요소를 동시에 확인할 수 있습니다.
  • 각 요소는 임시 리스트에 추가되며, 다음 요소가 접두사로 시작하면(startswith 조건) 지금까지 모은 임시 리스트를 결과 리스트에 저장하고 임시 리스트를 초기화합니다.
  • 반복이 끝난 후 남은 마지막 그룹도 결과 리스트에 추가합니다.
  • 완성된 결과 리스트를 콘솔에 출력합니다.
  • 마지막으로 sort() 메서드를 사용해 결과 리스트를 정렬하여 다시 출력합니다.

핵심 포인트

이 방식의 핵심은 zip_longest를 활용해 리스트의 현재 요소와 다음 요소를 동시에 살펴보는 것입니다. 다음 요소가 지정된 접두사로 시작하는 순간 그룹을 나누기 때문에, 접두사가 등장하는 위치를 기준으로 리스트가 자연스럽게 여러 개의 하위 리스트로 분할됩니다. 만약 리스트 길이가 홀수여서 짝이 맞지 않는 경우에도 zip_longestNone으로 채워 주므로 안전하게 처리할 수 있다는 장점이 있습니다.