문자열 목록에서 특정 접두사로 시작하는 문자열만 골라내야 하는 경우, 리스트 컴프리헨션, any() 함수, 그리고 startswith() 메서드를 조합하면 매우 간결하게 처리할 수 있습니다.
예제 코드
아래 예제를 통해 실제 동작 방식을 살펴보겠습니다.
my_list = ["streek", "greet", "meet", "leeks", "mean"]
print("The list is : ")
print(my_list)
prefix_list = ["st", "ge", "me", "re"]
print("The prefix list is : ")
print(prefix_list)
my_result = [element for element in my_list if any(element.startswith(ele) for ele in prefix_list)]
print("The result is :")
print(my_result)실행 결과
The list is : ['streek', 'greet', 'meet', 'leeks', 'mean'] The prefix list is : ['st', 'ge', 'me', 're'] The result is : ['streek', 'meet', 'mean']
코드 설명
- 먼저 문자열로 구성된 리스트(
my_list)를 정의하고 콘솔에 출력합니다. - 이어서 접두사 후보들을 담은 리스트(
prefix_list)를 정의하고 콘솔에 출력합니다. - 리스트 컴프리헨션을 사용해 원본 리스트의 각 요소를 순회하면서, 해당 요소가 접두사 리스트에 포함된 문자열 중 하나라도 일치하는지
any()와startswith()로 검사합니다. - 조건을 만족하는 요소만 새로운 리스트에 저장됩니다.
- 필터링된 결과는 변수
my_result에 할당됩니다. - 최종 결과가 콘솔에 출력됩니다.
추가 팁
str.startswith()메서드는 튜플을 인자로 받을 수 있습니다. 따라서element.startswith(("st", "ge", "me", "re"))처럼 작성하면any()없이도 동일한 결과를 더 짧은 코드로 얻을 수 있습니다.- 리스트 컴프리헨션은 일반적인
for반복문보다 가독성이 좋고 실행 속도도 빠른 편이므로, 필터링 작업에 적극적으로 활용하면 좋습니다.