리스트를 다루다 보면 특정 문자로 시작하는 요소만 골라내야 하는 경우가 자주 있습니다. 예를 들어 요일 데이터 중 'T'로 시작하는 'Tue'와 'Thu'만 추출하고 싶은 상황이 그렇습니다. 이번 글에서는 파이썬으로 리스트에서 특정 문자로 시작하는 요소를 찾는 두 가지 대표적인 방법을 예제 코드와 함께 살펴보겠습니다.
방법 1: 인덱스와 lower() 함수 활용
대소문자 구분 없이 비교하려면 lower() 함수를 사용해 첫 글자를 소문자로 변환한 뒤 비교하는 것이 좋습니다. 인덱스 [0]을 사용하면 각 요소의 첫 번째 문자에 접근할 수 있고, 이 값을 테스트 문자와 비교해 조건에 맞는 요소만 새 리스트에 담습니다.
예제 코드
listA = ['Mon', 'Tue', 'Wed', 'Thu']
# 테스트할 문자 지정
test = 'T'
# 원본 리스트 출력
print("주어진 리스트\n ", listA)
# lower()와 인덱스를 활용한 필터링
res = [idx for idx in listA if idx[0].lower() == test.lower()]
# 결과 출력
print("일치하는 문자로 시작하는 리스트 요소:\n ", res)
실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
주어진 리스트 ['Mon', 'Tue', 'Wed', 'Thu'] 일치하는 문자로 시작하는 리스트 요소: ['Tue', 'Thu']
방법 2: startswith() 메서드 활용
startswith() 메서드를 사용하면 훨씬 더 직관적인 코드를 작성할 수 있습니다. 이 메서드는 문자열이 지정한 문자로 시작하면 True, 그렇지 않으면 False를 반환하기 때문에 조건문에서 바로 활용하기 좋습니다.
예제 코드
listA = ['Mon', 'Tue', 'Wed', 'Thu']
# 테스트할 문자 지정
test = 'T'
# 원본 리스트 출력
print("주어진 리스트\n ", listA)
# startswith()를 활용한 필터링
res = [idx for idx in listA if idx.lower().startswith(test.lower())]
# 결과 출력
print("일치하는 문자로 시작하는 리스트 요소:\n ", res)
실행 결과
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
주어진 리스트 ['Mon', 'Tue', 'Wed', 'Thu'] 일치하는 문자로 시작하는 리스트 요소: ['Tue', 'Thu']
두 방법의 차이점 정리
인덱스 방식은 idx[0].lower()처럼 첫 글자를 직접 꺼내 비교하기 때문에 로직이 명확하게 드러나는 장점이 있습니다. 반면 startswith()는 의도가 코드에 그대로 드러나 가독성이 뛰어나며, 나중에 한 글자가 아닌 여러 글자로 시작하는지 확인해야 할 때도 손쉽게 확장할 수 있다는 장점이 있습니다.
또한 두 방식 모두 lower()를 적용했기 때문에 대소문자 구분 없이 동작합니다. 만약 대소문자를 엄격하게 구분해야 한다면 lower() 호출을 제거하면 됩니다. 실무에서는 가독성과 확장성을 고려해 startswith() 방식을 더 많이 사용하는 편입니다.