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

Python에서 문자열 길이별로 리스트 분류하는 방법

길이가 서로 다른 여러 문자열을 담고 있는 리스트가 있을 때, 이 요소들을 문자열 길이가 같은 것끼리 묶어서 그룹으로 분류해야 하는 경우가 자주 있습니다. 예를 들어 요일 이름들이 담긴 리스트에서 6글자인 'Monday', 'Friday', 'Sunday'를 한 그룹으로, 8글자인 'Thursday', 'Saturday'를 다른 그룹으로 나누는 식입니다.

이 글에서는 Python으로 이러한 작업을 수행하는 두 가지 대표적인 방법을 살펴보겠습니다.

방법 1: for 루프 사용하기

첫 번째 방법은 for 루프를 이용해 리스트의 모든 요소를 하나씩 순회하면서, 각 요소의 길이가 기존 그룹에 있는 요소의 길이와 일치할 경우에만 해당 그룹에 추가하는 방식입니다.

예제 코드

listA = ['Monday','Thursday','Friday','Saturday','Sunday']
# 주어진 리스트
print("Given list : \n",listA)
# 문자열 길이별로 분류
len_comp = lambda x, y: len(x) == len(y)
res = []
for sub_list in listA:
    ele = next((i for i in res if len_comp(sub_list, i[0])), [])
    if ele == []:
        res.append(ele)
    ele.append(sub_list)
# 결과 출력
print("The list after creating categories : \n",res)

코드의 핵심 로직은 다음과 같습니다.

  • len_comp 람다 함수는 두 문자열의 길이가 같은지 비교합니다.
  • next() 함수는 이미 생성된 그룹 중에서 현재 요소와 길이가 일치하는 그룹을 찾아 반환하며, 일치하는 그룹이 없으면 빈 리스트를 반환합니다.
  • 빈 리스트가 반환되면 새로운 그룹을 만들어 결과 리스트에 추가하고, 현재 요소를 해당 그룹에 넣습니다.

실행 결과

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

Given list :
['Monday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
The list after creating categories :
[['Monday', 'Friday', 'Sunday'], ['Thursday', 'Saturday']]

방법 2: sort와 groupby 사용하기

두 번째 방법은 먼저 모든 요소를 길이를 기준으로 정렬한 뒤, 표준 라이브러리인 itertools 모듈에 포함된 groupby 함수를 적용하는 방식입니다. 코드가 훨씬 간결하고 가독성이 좋다는 장점이 있습니다.

예제 코드

from itertools import groupby
listA = ['Monday','Thursday','Friday','Saturday','Sunday']
# 주어진 리스트
print("Given list : \n",listA)
# 문자열 길이별로 분류
get_len = lambda x: len(x)
sub_list = sorted(listA, key = get_len)
res = [list(ele) for i, ele in groupby(sub_list, get_len)]
# 결과 출력
print("The list after creating categories : \n",res)

동작 과정을 단계별로 보면 다음과 같습니다.

  • sorted() 함수에 key=get_len을 지정하여 문자열을 길이순으로 정렬합니다.
  • groupby()는 인접한 요소들을 키 값(여기서는 문자열 길이)이 같은 것끼리 묶어줍니다.
  • 리스트 컴프리헨션으로 각 그룹을 리스트로 변환하여 최종 결과를 만듭니다.

실행 결과

위 코드를 실행하면 첫 번째 방법과 동일한 결과를 얻습니다.

Given list :
['Monday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
The list after creating categories :
[['Monday', 'Friday', 'Sunday'], ['Thursday', 'Saturday']]

정리

두 방법 모두 동일한 결과를 제공하지만 상황에 따라 선택 기준이 달라집니다. for 루프 방식은 로직을 직접 제어할 수 있어 학습 목적이나 세부 조건 추가에 유리하고, sort + groupby 방식은 코드가 짧고 명확해 실무에서 간결하게 처리할 때 적합합니다. 참고로 groupby를 사용할 때는 반드시 사전에 데이터를 정렬해야 올바르게 그룹화된다는 점을 기억하세요.