4.6 컴프리헨션

4.6.1 리스트 컴프리헨션

number_list = list()
for number in range(1, 6):
number_list.append(number)
print(number_list)

[1, 2, 3, 4, 5]

number_list = list(range(1,6))
print(number_list)

[1, 2, 3, 4, 5] ** [표현식 for 항목 in 순회 가능한 객체] **

number_list = [number for number in range(1,6)]
print(number_list)

[1, 2, 3, 4, 5]

number_list = [ number - 1 for number in range(1, 6)]
print(number_list)

[0, 1, 2, 3, 4] ** [표현식 for 항목 in 순회 가능한 객체 if 조건] **

a_list = [number for number in range(1, 6) if number % 2 == 1]
print(a_list)

[1, 3, 5]

rows = range(1,4)
cols = range(1,3)
for row in rows:
for col in cols:
print(row, col)

1 1 1 2 2 1 2 2 3 1 3 2

rows = range(1,4)
cols = range(1,3)
cells = [(row, col) for row in rows for col in cols]
for cell in cells:
print(cell)

(1, 1) (1, 2) (2, 1) (2, 2) (3, 1) (3, 2)

(row, col)튜플 리스트를 만들어서 cells에 할당후 cells 를 순회

for row, col in cells:
print(row, col)

1 1 1 2 2 1 2 2 3 1 3 2 그리고 cells리스트를 순회한 것처럼, 각 튜플로 부터 row와 col의 값만 출력하기 위해 튜플 언패킹 가능

4.6.2 딕셔너리 컴프리헨션

** {키_표현식 : 값_표현식 for 표현식 in 순회 가능한 객체} **

word = 'letters'
letter_counts = {letter: word.count(letter) for letter in word}
letter_counts

{‘e’: 2, ‘l’: 1, ‘r’: 1, ‘s’: 1, ‘t’: 2}

word = 'letters'
letter_counts = {letter: word.count(letter) for letter in set(word)}
letter_counts

{‘e’: 2, ‘l’: 1, ‘r’: 1, ‘s’: 1, ‘t’: 2}

set(word)

{‘e’, ‘l’, ‘r’, ‘s’, ‘t’}

4.6.3 셋 컴프리 헨션

** {표현식 for 표현식 in 순회 가능한 객체 **

a_set = {number for number in range(1, 6) if number % 3 == 1}
print(a_set)
type(a_set)

{1, 4} set

4.6.4 제너레이터 컴프리헨션

** 튜플은 컴프리 헨션이 없다! **

number_thing = (number for number in range(1, 6))
print(number_thing)
print(type(number_thing))

<generator object at 0x7fe2bc5c57d8> <class 'generator'>

괄호 안의 내용은 제너레이터 컴프리헨션 이다. 이것은 제너레이터 객체를 반환한다.

for number in number_thing:
print(number)

1 2 3 4 5

number_thing = (number for number in range(1, 6))
number_list = list(number_thing)
number_list

[1, 2, 3, 4, 5]

try_again = list(number_thing)
print(try_again)

[]

Comments