멤버 연산은 어떤 값이 목록 안에 있는지 확인해주는 기능입니다. in 과 not in 두 가지 방법으로 확인할 수 있습니다.
in
값이 목록 안에 있으면 참(True)이에요.
not in
값이 목록 안에 없으면 참(True)이에요.
is는 is not이고 in은 not in입니다.
장바구니에 물건이 있는지 없는지 살펴본다고 생각해보세요. 다음과 같은 예시가 있을 수 있습니다.
fruits = ["사과", "바나나", "포도"]
print("사과" in fruits) # True, 사과가 목록에 있기 때문이에요.
print("오렌지" not in fruits) # True, 오렌지는 목록에 없기 때문이에요.
아래와 같은 예시도 가능합니다.
a = [1, 2, 3, 4]
b = [1, 2, 3, 4]
c = 'hello world'
print(1 in a) # 출력: True
print(0 not in a) # 출력: True
print([2] in b) # 출력: False
print([1, 2] in b) # 출력: False
print('h' in c) # 출력: True
print('hello ' in c) # 출력: True
이번에는 dict와 set에 대해서도 살펴보도록 하겠습니다.
a = {'key1': 'value1', 'key2': 'value2'} #딕셔너리
b = {10, 10, 20}
print(10 in b) # 출력: True
print({10} in b) # 출력: False, 주의
print({10, 20} in b) # 출력: False, 주의
print('key1' in a) # 출력: True
print('value1' in a) # 출력: False
print(('key1', 'key2') in a) # 출력: False
# {'key1':'value1'} in a # error
이처럼 set에서는 요소만, dict에서는 key값만 확인할 수 있습니다. 다만 일부 메서드를 사용하여 요소의 존재 여부를 파악할 수 있습니다.
'value1' in a.values()
in 연산자는 집합이나 dict에서 좀 더 높은 속도를 발휘합니다. 어떤 것이 얼마만큼에 시간이 걸리는지 측정하는 가장 보편적인 방법이 시간복잡도 측정인데요. in은 set, dict에서는 O(1)이고 list와 tuple에서는 O(n)입니다. 여기서 더 자세한 시간 복잡도에 대한 설명을 이어가진 않지만 시간이 빠른 순으로 아래와 같습니다.