
본 블로그 글은 박동민·강영민 저자님의 으뜸파이썬 교재를 참고하여 만들어진 글임을 밝힙니다.
lambda 매개변수1, 매개변수2, ... : 표현식
add = lambda x, y : x + y
print('10과 20의 합 :', add(10,20))
print('10과 20의 합 :', (lambda x, y: x + y)(10, 20)) # 인라인 람다 함수
filter([적용시킬 함수], {반복 가능한 객체})
def adult_func(n):
return n >= 19
ages = [20, 3, 40, 33, 18, 19]
for a in filter(adult_func, ages):
print(a, end = ' ')
lambda와 함께 사용하는 예제
ages = [20, 3, 40, 33, 18, 19]
for a in filter(lambda x : x >= 19, ages):
prinT(a, end = ' ')
더 간략화하는 필터
ages = [20, 3, 40, 33, 18, 19]
adult_ages = list(filter(lambda x : x >= 19, ages))
print(adult_ages)
map([적용시킬 함수], {반복 가능한 객체})
def sqaure(x):
return x ** 2
n_list = [1, 2, 3, 4, 5]
sqaure_n = list(map(sqaure, n_list))
print(sqaure_n)
lambda와 함께 사용하는 예제
n_list = [1, 2, 3, 4, 5]
sqaure_n = list(map(lambda x : x ** 2, n_list))
print(sqaure_n)
for문이나 map() 함수 대신 사용할 수 있어 코드가 더 읽기 쉽고 간결해진다.[표현식 for 항목 in 반복 가능한 객체 if 조건]
result = [i**2 for i in range(5)]
print(result) # [0, 1, 4, 9, 16]
if 조건이 들어간 리스트 축약 표현
result = [i for i in range(10) if i % 2 == 0]
print(result) # [0, 2, 4, 6, 8]
중첩 반복 리스트 축약 표현
result = [(x, y) for x in range(3) for y in range(3)]
print(result) # [(0, 0), (0, 1), (0, 2), (1, 0), ...]
if 조건이 두 개인 리스트 축약 표현
# 1부터 20까지의 숫자 중 2의 배수이면서 3의 배수인 숫자
result = [i for i in range(1, 21) if i % 2 == 0 if i % 3 == 0]
print(result)
파이썬에서 반복 가능한 객체(Iterable)를 순회할 수 있는 객체이다.
주로 for문과 함께 사용되어 요소를 하나씩 처리한다.
반복자는 __iter__와 __next__ 매직 메서드를 구현하여 정의할 수 있다.
__iter__ 매서드self를 반환하여 객체 자체가 반복자가 되게 만든다.__next__ 매서드StopIteration 예외를 발생시켜 반복을 종료한다.반복자 관련 내장함수
iter() 함수iter() 함수는 반복 가능한 객체의 __iter__() 메서드를 호출하여 반복자를 생성한다.next() 함수next() 함수 호출은 반복자 객체의 __next__() 매직 메서드를 호출하는 것과 같다.StopIteration 예외를 발생시켜 반복을 종료한다.__iter__와 for문의 관계
iter() 함수를 호출한다.iter() 함수는 __iter__ 메서드를 실행하여 객체를 반복자(Iterator)로 변환한다.__next__ 메서드를 호출하여 값을 하나씩 가져온다.for문은 StopIteration 예외가 발생할 때 반복을 종료한다.iter() 함수와 next() 함수 사용 예시
# 리스트를 반복자로 변환
nums = [10, 20, 30]
iterator = iter(nums)
print(next(iterator)) # 출력: 10
print(next(iterator)) # 출력: 20
print(next(iterator)) # 출력: 30
# 다음 값이 없으면 StopIteration 예외 발생
# print(next(iterator)) # 주석 제거 시 StopIteration 예외 발생
사용자 정의 반복자 클래스
class Counter:
def __init__(self, start, end):
self.current = start
self.end = end
def __iter__(self):
return self # 반복자 반환
def __next__(self):
if self.current < self.end:
self.current += 1
return self.current - 1 # 현재 값 반환 후 1 증가
else:
raise StopIteration # 반복 종료
# 반복자 사용
counter = Counter(1, 5)
for num in counter:
print(num, end=' ') # 출력: 1 2 3 4
| 함수 | 설명 | 예제 | 결과 |
|---|---|---|---|
min() | 반복 가능한 객체에서 최소값을 반환함 | min([3, 1, 4, 1, 5]) | 1 |
max() | 반복 가능한 객체에서 최대값을 반환함 | max([3, 1, 4, 1, 5]) | 5 |
all() | 모든 요소가 참(True)이면 True를 반환하고, 하나라도 거짓(False)이면 False를 반환함 | all([True, 1, 'a']) | True |
any() | 하나라도 참(True)인 요소가 있으면 True를 반환하고, 모두 거짓(False)이면 False를 반환함 | any([False, 0, None, 1]) | True |
ascii() | 객체의 비 ASCII 문자를 이스케이프 코드로 변환한 문자열을 반환함 | ascii("파이썬") | "'\\ud30c\\uc774\\c2dd'" |
bool() | 객체의 논리적 참/거짓 값을 반환함 | bool([]) | False |
filter() | 반복 가능한 객체에서 조건을 만족하는 요소만 반환함 | list(filter(lambda x: x > 2, [1, 2, 3, 4])) | [3, 4] |
iter() | 반복 가능한 객체를 반복자로 변환함 | iterator = iter([1, 2, 3]) | <iterator> |
map() | 반복 가능한 객체의 각 요소에 함수를 적용한 값을 반환함 | `list(map(lambda x: x2, [1, 2, 3]))`** | [1, 4, 9] |
next() | 반복자에서 다음 값을 반환하며, 더 이상 값이 없으면 StopIteration 예외를 발생시킴 | next(iter([1, 2, 3])) | 1 |
enumerate() | 반복 가능한 객체의 각 요소에 인덱스 값을 추가하여 반환함 | list(enumerate(['a', 'b', 'c'])) | [(0, 'a'), (1, 'b'), (2, 'c')] |
zip() | 두 개 이상의 반복 가능한 객체를 병렬로 묶어 튜플로 반환함 | list(zip([1, 2, 3], ['a', 'b', 'c'])) | [(1, 'a'), (2, 'b'), (3, 'c')] |
sorted() | 반복 가능한 객체를 정렬한 후 새로운 리스트로 반환함 | sorted([3, 1, 4, 1, 5]) | [1, 1, 3, 4, 5] |
reversed() | 반복 가능한 객체의 요소를 반대로 뒤집은 반복자를 반환함 | list(reversed([1, 2, 3])) | [3, 2, 1] |
yield 문을 사용하여 값을 반환하며, 반환 후에도 함수의 실행 상태를 유지한다.yield는 값을 반환하면서 함수의 실행 상태를 일시 중단함def my_generator():
yield 1
yield 2
yield 3
gen = my_generator()
print(next(gen)) # 출력: 1
print(next(gen)) # 출력: 2
print(next(gen)) # 출력: 3
# print(next(gen)) # StopIteration 예외 발생
for문과 함께 사용
def my_generator():
yield "Hello"
yield "World"
for value in my_generator():
print(value)