{표현식} for {변수} in {iterator/iterable} if {조건 표현식}
rsit1 = list(range(10))
print(rsit1)
rsit2 = list(n**2 for n in range(10))
print(rsit2)
rsit3 = list(n for n in range(10) if n%2==0)
print(rsit3)
rsit4 = list(n**2 for n in range(10) if n%2)
print(rsit4)
lst = [-30, 45, -5, -90, 20, 53, 77, -36]
rsit5 = [n for n in lst if n<0]
print(rsit5)
ages = [34,39,20,18,13,54]
rsit6 = [n for n in ages if n>=19]
print(rsit6)
A=[1,2,3]
B=[2,4,6]
rsit7 = [a*b for a in A for b in B] # for문 여러개 작성해도 됨
print(rsit7)
실행 결과
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 2, 4, 6, 8]
[1, 9, 25, 49, 81]
[-30, -5, -90, -36]
[34, 39, 20, 54]
[2, 4, 6, 4, 8, 12, 6, 12, 18]
lambda 매개변수: 리턴값
예제 코드
sub = lambda x, y: x - y
# 람다함수를 sub라는 이름으로 할당도 가능함
print(sub(5,3))
rslt = (lambda x, y: x * y)(5,3)
print(rslt)
#보통 람다함수는 함수의 인자로 많이 사용함
st_lst = ['abcdefg', 'hello', 'python', 'c', 'java']
print(sorted(st_lst, key = len)) # 디폴트: 사전식 배열 , key값 입력 시 그 키값을 기준으로 베열
print(max(st_lst, key = len))
print(sorted(st_lst, key = lambda s:s[-1]))
실행 결과
2
15
['c', 'java', 'hello', 'python', 'abcdefg']
abcdefg
['java', 'c', 'abcdefg', 'python', 'hello']
map(적용시킬 함수, 반복가능한 객체(리스트), ...)
filter(적용시킬 함수, 반복가능한 객체(리스트), ...)
def lamEx():
ages = [34,39,20,18,13,54]
rslt = list(filter(lambda age: age>=15, ages))
print(rslt)
def mapEx():
lst = list(map(lambda x: x**2, range(10)))
print(lst)
def main():
lamEx()
mapEx()
main()
실행 결과
[34, 39, 20, 18, 54]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
for 반복자 in 반복할 수 있는 것
numbers = [1, 2, 3, 4, 5, 6]
r_num = reversed(numbers)
print('reversed_numbers:', r_num)
print(next(r_num))
print(next(r_num))
print(next(r_num))
print(next(r_num))
print(next(r_num))
실행 결과
reversed_numbers: <list_reverseiterator object at 0x034D21D0>
6
5
4
3
2
__next__(self)를 이용해 next() 함수를 구현하여야 하며, __iter__(self)함수를 통해 이터레이터임을 정의해야함class Fibo:
def __init__(self):
self._x = 1
self._y = 1
def __iter__(self):
return self
def __next__(self):
rslt = self._x
if rslt >= 100:
raise StopIteration
self._x = self._y
self._y += rslt
return rslt
fibo = Fibo()
for elt in fibo:
print(elt, end = ' ')
실행 결과
1 1 2 3 5 8 13 21 34 55 89
def gen_odd(input = 1):
if input%2 == 0:
input = 1
while True:
yield input
input += 2
go = gen_odd(3)
for _ in range(10):
print(next(go), end = ' ')
실행 결과
3 5 7 9 11 13 15 17 19 21
invitations = ['Kim', 'Lee', 'Park', 'Choi'] #참석자 그룹
persons = [1, 3, 0, 6] #동반자 포함 참석자 수
print('총 참석 인원:', sum(persons))
print('파티에 한 사람이라도 오는가?', any(persons))
print('초대한 그룹이 모두 오는가?', all(persons))
print('가장 많이 오는 그룹의 인원 수:', max(persons))
실행 결과
총 참석 인원: 10
파티에 한 사람이라도 오는가? True
초대한 그룹이 모두 오는가? False
가장 많이 오는 그룹의 인원 수: 6