-
[python] 리스트 컴프리헨션(List Comprehension) & 이터러블(iterable) 객체코딩 연습/코딩배우기 2020. 8. 21. 14:00반응형
■ 리스트 컴프리헨션(List Comprehension)
- 리스트 내에 계산식, for 문, if 문 등을 삽입하여 리스트를 생성하는 것
- 이 표현식은 list, set, dict과 같은 자료형, 그리고 소괄호를 이용한 generator 객체 생성에도 이용 가능함
# 짝수 구하기 even_num = [n for n in range(1, 11) if not n % 2] print(even_num) # [2, 4, 6, 8, 10] # 3의 배수 구하기 three_multi = [n for n in range(1, 11) if not n % 3] print(three_multi) # [3, 6, 9] # 이중 for문 (주사위 2개로 나올 수 있는 경우의 수) dice = [str(i) + ':' + str(j) for i in range(1, 7) for j in range(1, 7)] print(dice) ''' ['1:1', '1:2', '1:3', '1:4', '1:5', '1:6', '2:1', '2:2', '2:3', '2:4', '2:5', '2:6', '3:1', '3:2', '3:3', '3:4', '3:5', '3:6', '4:1', '4:2', '4:3', '4:4', '4:5', '4:6', '5:1', '5:2', '5:3', '5:4', '5:5', '5:6', '6:1', '6:2', '6:3', '6:4', '6:5', '6:6'] '''
■ 이터러블(iterable) 객체 활용
- iterable은 반복 가능한의 뜻으로, iterable 객체는 한 번에 하나씩 자료를 순서대로 반환(추출)할 수 있는 반복 가능한 객체(list, tuple, str, range, dict, set)를 의미한다.
- iterable 객체는 내장함수 또는 스페셜 메소드(__iter__, iter())로 생성된 객체이다. iter() 함수에 iterable 객체를 인자로 전달하면 iter 함수는 iterable 객체에 접근하는 도구인 "iterator 객체"를 생성해서 반환한다.
"iterable 객체를 대상으로 iter 함수를 호출해서 iterator 객체를 만든다."
- 값 추출은 스페셜 메소드(__next__, next())를 사용하고, 값 추출이 완료된 후 다시 추출하면 Stopiteration 예외가 발생한다.
item = ['식빵', '쨈', '야채', '햄', '계란', '먹기', '커피'] brunch = iter(item) print('\n*** 브런치 준비 ***\n') try: print(next(brunch), '놓고') print(next(brunch), '바르고') print(next(brunch), '올리고') print(next(brunch), '넣고') print(next(brunch), '얹고') print('맛있게', next(brunch), '~~') print('그리고', next(brunch), '마시기') print(next(brunch)) # StopIteration 발생 except StopIteration: print('\n잘 먹었다!!!') [실행 결과] *** 브런치 준비 *** 식빵 놓고 쨈 바르고 야채 올리고 햄 넣고 계란 얹고 맛있게 먹기 ~~ 그리고 커피 마시기 잘 먹었다!!!
※ 스페셜 메서드를 통해 함수 호출하는 형태
ds = [1, 2, 3] ir = ds.__iter__() # iter(ds) 대신 __iter__() 사용 print(ir.__next__()) # 1 # next(ir) 대신 __next__() 사용 print(ir.__next__()) # 2 # iterable 객체 확인 방법 print(hasattr(ds, '__iter__')) # True
[참고 자료] 윤성우의 열혈 파이썬 중급편
반응형'코딩 연습 > 코딩배우기' 카테고리의 다른 글
[python] 제너레이터(Generators) 함수 & 표현식 (0) 2020.08.21 [python] 소수(素數, prime number) 구하기 (0) 2020.08.21 [python] n부터 시작하여 m까지 연속하는 숫자의 합은? (0) 2020.08.20 [python] 클래스(class)와 객체(object) 이해하기 (0) 2020.08.19 [python] 객체처럼 다뤄지는 함수, 그리고 이름 없는 함수, 람다(lambda) (0) 2020.08.19