Python으로 리스트를 다루다 보면 두 리스트가 서로 완전히 다른지, 아니면 공통된 요소를 하나라도 가지고 있는지 확인해야 하는 상황이 자주 발생합니다. 이 글에서는 두 리스트의 요소를 비교하여 공통 요소의 존재 여부를 파악하는 대표적인 방법 두 가지를 예제 코드와 함께 소개합니다.
in 연산자 사용하기
for 반복문 안에서 in 절은 특정 요소가 리스트에 존재하는지 검사할 때 사용됩니다. 이 논리를 확장하면 첫 번째 리스트에서 요소를 하나씩 꺼낸 뒤, 해당 요소가 두 번째 리스트에도 존재하는지 확인하는 방식으로 두 리스트를 비교할 수 있습니다. 이를 위해 중첩 for 반복문을 활용합니다.
예제 코드
# 리스트 선언
list1=['a',4,'%','d','e']
list2=[3,'f',6,'d','e',3]
list3=[12,3,12,15,14,15,17]
list4=[12,42,41,12,41,12]
# 두 리스트의 공통 요소를 확인하는 함수 정의
def commonelems(x,y):
common=0
for value in x:
if value in y:
common=1
if(not common):
return ("The lists have no common elements")
else:
return ("The lists have common elements")
# 두 리스트의 공통 요소 비교
print("Comparing list1 and list2:")
print(commonelems(list1,list2))
print("\n")
print("Comparing list1 and list3:")
print(commonelems(list1,list3))
print("\n")
print("Comparing list3 and list4:")
print(commonelems(list3,list4))위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
출력 결과
Comparing list1 and list2: The lists have common elements Comparing list1 and list3: The lists have no common elements Comparing list3 and list4: The lists have common elements
집합(Set) 사용하기
두 리스트에 공통 요소가 있는지 확인하는 또 다른 방법은 집합(set)을 활용하는 것입니다. 집합은 중복 없는 고유한 요소들의 순서 없는 컬렉션이므로, 리스트를 각각 집합으로 변환한 뒤 교집합(& 연산자)으로 비교하면 됩니다. 공통 요소가 존재한다면 그 결과 집합은 비어 있지 않습니다. 아래 예제에서는 집합 교집합뿐만 아니라 내장 함수 any()를 사용해 공통 요소 여부를 검사하는 방법도 함께 보여줍니다.
예제 코드
list1=['a',4,'%','d','e']
list2=[3,'f',6,'d','e',3]
# 리스트를 집합으로 변환하여 공통 요소를 확인하는 함수 정의
def commonelem_set(z, x):
one = set(z)
two = set(x)
if (one & two):
return ("There are common elements in both lists:", one & two)
else:
return ("There are no common elements")
z = commonelem_set(list1, list2)
print(z)
def commonelem_any(a, b):
out = any(check in a for check in b)
# 조건 검사
if out:
return ("The lists have common elements.")
else:
return ("The lists do not have common elements.")
print(commonelem_any(list1, list2))위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
출력 결과
('There are common elements in both lists:', {'d', 'e'})
The lists have common elements.마무리
간단한 비교라면 in 연산자와 반복문만으로 충분하지만, 데이터 크기가 크거나 공통 요소 자체를 확인하고 싶다면 집합(set)을 활용하는 것이 훨씬 효율적입니다. 집합 연산은 평균적으로 O(1)의 시간 복잡도를 가지므로 대량의 데이터를 다룰 때 성능 면에서 유리합니다.