goodthings4me.tistory.com
■ 리스트 컴프리헨션(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 |
댓글