2013년 9월 30일 월요일

[Python] 'in' 오퍼레이터 이야기

파이썬의 내장(built-in) 키워드 중 in 이라는 명령어는 다양한 용도로 이용 할 수 있다. 이 오퍼레이터의 용도는 이름에서 유추 가능하듯이 넓은(?) 어디에서(?) 무엇인가를 판단 혹은 지칭하는 것이다.

뭔가 말이 이상한데 예제를 통해 살펴보자.

가장 기본적으로 이용 할 수 있는 곳은 리스트이다.
>>> l = [ 1, 2, 3, 4, 5 ]
>>> 2 in l
True
>>> 6 in l
False
>>> 10 not in l
True
리스트에 특정한 아이템이 존재하는지 확인 하고 싶을 때 in 명령어를 이용 할 수 있다. 만약 in이 없었다면 리스트를 순회하면서 하나하나 검사하는 (귀찮은) 코드를 만들어야 했을지도 모르는데 정말 친절하고 고마운 명령어다.

리스트를 이용해 for 루프를 도는(Iteration) 경우에도 유용하다.
>>> for item in l: print item
...
1
2
3
4
5
갯수를 세서 리스트의 아이템을 일일이 하나하나 가져오는 수고를 덜어준다.

문자열에서도 리스트와 비슷하게 이용이 가능하다.
>>> s = 'this is test string'
>>> 'test' in s
True
>>> 'invalid' in s
False
문자열에 특정한 문자(열)이 있는지 파악 할 수 있다. string.find와 비슷하긴 하지만 더 단순하게 사용 할 수 있다.

물론 사전(dict)형에서도 이용 할 수 있다. 하지만 동작은 조금 다르다.
>>> d = { 'a': 'abc', 'b': 'break', 'c': 'case' }
>>> 'a' in d
True
>>> 'd' in d
False
>>> 'e' not in d
True
사전에서 키가 존재하는지 파악하는 용도로 in 을 사용 할 수 있다. 물론 dict.has_key()를 이용하는 방법도 있지만 길이가 훨씬 짧고 가독성도 좋은 편이다.

사전형의 for 루프에도 동일하게 사용 할 수 있다.
>>> for item in d: print item
...
a
c
b
앞서 키를 파악하는 용도와 비슷하게 for 루프에선 키(key)를 for 루프로 순환(Iteration)시킨다. 이 코드는 dict.allkeys()를 타이핑 하는 수고를 많이 덜어주기도 한다.

파일 입력에서 사용하면 어떻게 될까.
>>> f = open('readme.txt')
>>> for line in f: print line
...
This is test file.

This file's name is readme.txt.
file.readline을 쓸 수고를 덜어준다.

당연하겠지만 아래와 같은 식의 코드도 동일하게 동작한다.
>>> with open('readme.txt') as f:
...     for line in f:
...             print line
...
This is test file.

This file's name is readme.txt.
이 외에도 다양한 예제가 있을 것 같지만 대표적인 사용 예는 이 정도면 충분하리라 생각된다.

친절하고 고마운 in 키워드를 찬양하자!~~ ㅇ_ㅇ 만세~~

댓글 없음 :