주어진 문자열 리스트 안에서 다른 문자열의 부분 문자열(substring)에 해당하는 모든 문자열을 찾아야 하는 경우, 파이썬의 set과 list 자료형을 활용하면 아주 간단하게 해결할 수 있습니다.
핵심 아이디어는 두 리스트를 중첩 반복하며 조건에 맞는 요소만 골라내고, set으로 중복을 제거한 뒤 다시 list로 변환하는 것입니다.
예제 코드
아래는 두 개의 문자열 리스트에서 부분 문자열 관계에 있는 모든 문자열을 찾는 전체 예제입니다.
my_list_1 = ["Hi", "there", "how", "are", "you"]
my_list_2 = ["Hi", "there", "how", "have", "you", 'been']
print("The first list is :")
print(my_list_1)
print("The second list is :")
print(my_list_2)
my_result = list(set([elem_1 for subset_1 in my_list_1 for elem_1 in my_list_2 if elem_1 in subset_1]))
print("The result is :")
print(my_result)실행 결과
The first list is : ['Hi', 'there', 'how', 'are', 'you'] The second list is : ['Hi', 'there', 'how', 'have', 'you', 'been'] The result is : ['there', 'you', 'Hi', 'how']
코드 설명
두 개의 문자열 리스트(
my_list_1,my_list_2)를 정의하고 콘솔에 출력합니다.리스트 컴프리헨션(list comprehension)을 사용해 두 리스트를 중첩 반복하면서,
in연산자로elem_1이subset_1안에 포함되어 있는지 검사합니다.조건을 만족하는 요소들만 모은 뒤,
set()으로 감싸 중복 값을 제거하고 고유한 값만 남깁니다.list()를 사용해 집합을 다시 리스트 형태로 변환합니다.최종 결과를
my_result변수에 저장한 후 콘솔에 출력합니다.
참고 사항
set은 요소의 순서를 보장하지 않기 때문에, 실행할 때마다 결과 리스트의 순서가 달라질 수 있습니다. 순서가 중요하다면 sorted() 함수로 정렬하거나, dict.fromkeys()처럼 순서를 유지하면서 중복을 제거하는 방법을 사용하는 것이 좋습니다.