멤버 연산자

in / not in

멤버 연산자

멤버 연산자(membership operators)란 자료구조 안에 찾고자 하는 값이 있는지(혹은 없는지) 확인하는 연산자입니다.

이 연산자는 in과 not in이 있으며 자주 사용하는 방법은 두 가지로 in만 사용하는 방법과 for문에서 사용하는 방법이 있습니다.

멤버 연산자만 사용하기

멤버 연산자만 사용한다면 True 혹은 False만을 반환할 수 있습니다.

  • in을 사용한다면 자료구조 안에 값이 있을 때 True, 없으면 False를 반환

  • not in을 사용한다면 자료구조 안에 값이 있을 때 False, 없으면 True를 반환

사용 방법

연산자

예시

in

x in y (y 안에 x가 있는가?)

not in

x not in y (y 안에 x가 없는가?)

문자열에서 쓰는 방법은 아래와 같습니다.

in을 사용할 때, 글자가 문자열 안에 포함되어 있으면 True를 반환하고, 없으면 False를 반환합니다. not in은 그 반대입니다.

s = 'apple'

print('app' in s) # True를 반환
print('ppe' in s) # False를 반환

print('apples' not in s) # True를 반환
print('a' not in s) # False를 반환

리스트와 튜플, 세트와 같은 자료구조에서는 요소에 값이 있는지 없는지에 따라 True, False를 반환합니다. 참고로 딕셔너리의 경우에는 key값이 있는지 없는지 확인합니다.

for ... in ...

그동안 우리는 for문을 사용할 때 for ... in range(...)과 같은 형식으로 코딩을 했는데요. range대신 자료구조를 넣어주면 변수의 값을 요소의 값으로 설정할 수 있습니다.

위와 같은 코드가 있으면 반복문은 총 4번 돌아가고, 그동안 i의 값은 123, 314, 119, 157로 설정됩니다.

세트와 튜플도 마찬가지로 리스트와 똑같습니다.

문자열의 경우에는 한글자씩 변수에 추가됩니다.

딕셔너리의 경우에는 key값을 제공합니다.

연습문제

각 선수의 이름이 주어지는데, 같은 성이 5명 이상이어야 경기를 진행할 수 있다고 합니다.

일단 입력 값을 받는 코드를 만들어줍시다.

우리는 딕셔너리를 사용하니까 같은 성을 입력 받으면 1을 더해주는 것으로 만들어줍시다.

주의할 점은 그냥 D[s[0]] += 1만 해주면 아직 딕셔너리에 key값이 저장되지 않았기 때문에 오류를 출력합니다. 그러므로 in이나 not in을 사용하여 문제를 풀어야합니다.

딕셔너리 안에 이미 key값 s가 있으면 D[s[0]] += 1을 해주고, 없으면 D[s[0]] = 1로 해주고 그 이후에 같은 값이 나올 때 D[s[0]] += 1을 해줄 수 있습니다.

이제 for ... in ... 을 이용하여 같은 성을 가진 선수가 5명 이상인지 확인하면 됩니다.

문제에서 같은 성을 가진 선수가 5명 이상이면 성의 첫 글자를 사전순으로 출력하라고 했으므로 일단 리스트를 하나 만들어서 성의 첫 글자를 저장해야겠네요.

그리고 len을 이용하여 ans에 요소가 없으면 PREDAJA를 출력하고, 요소가 있으면 ans를 정렬하여 join을 이용해 출력하면 됩니다.

풀어볼 문제

Last updated