나중에 쓰려고 쌓아두고 있던 간단한 예시인데, 더 이상 쌓이지가 않아서 (–;)
방출해 봅니다;
파이썬 이터레이터/제너레이터는 함축적으로 프로그래밍하는 걸 즐기는 사람들에게는
정말 재미있지만, 절차적 프로그래밍을 하다가 갑자기 이터레이터를 쓰는 게 적응이
잘 안 되는 경우도 많이 볼 수 있습니다. 최고의(!) 파이썬 책으로
유명한 David Beazley가 지난 3월에 PyCon 2008에서 튜토리얼로
시스템 프로그래머를 위한 제너레이터 트릭을 발표했습니다. 여러모로 재미있는 내용인데요~ 저기서는 제너레이터를
주로 다뤘는데, 몇 가지 이터레이터와 관련된 사용 예를 소개해 드리려고요~
(별로 관련 없는 것이 뒤죽박죽;;)
zip을 쓰면 이터레이터를 일정 개수씩 빼오는 걸 간단하게 할 수 있습니다.
>>> s = iter('abcdefghijklmnopqrstvwxyz') >>> zip(range(5), s) [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e')] >>> zip(range(5), s) [(0, 'f'), (1, 'g'), (2, 'h'), (3, 'i'), (4, 'j')]
빈칸이 올 때까지 입력받은 걸 리스트로 받으려면?
>>> list(iter(raw_input, '')) Python - batteries included ['Python - ', 'batteries included']
딕셔너리 2개에서 양쪽 중 하나라도 키가 있는 것들을 뽑아서 돌려서 합치려는 경우..
>>> a = {'a': 3, 'b': 4} >>> b = {'b': 5, 'c': 6} >>> set(a) | set(b) set(['a', 'c', 'b']) >>> dict((key, a.get(key, 0) + b.get(key, 0)) for key in set(a) | set(b)) {'a': 3, 'c': 6, 'b': 9}
(이 경우는 collections.defaultdict를 써도 간단합니다.)
리스트를 받아서 순위를 계산
>>> from operator import * >>> s = [9, 8, 1, 5, 3, 7, 4, 0] >>> map(itemgetter(0), sorted(enumerate(s), key=itemgetter(1), reverse=True)) [0, 1, 5, 3, 6, 4, 2, 7]
(이건 뭐 주제하고 상관도 없고 제멋대로;;;)
코드에 줄바꿈이 없어서 처음에 이해하기가 힘들었네요 ^^;
그래도 유용한 정보 감사합니다.
코드블럭을 잘못 잡아서 RSS에서 줄 바꿈이 안 돼 있었네요 ^.^; 수정했습니다~