python Comprehension

1. List comprehension


숫자 시퀀스를 만드는 가장 기본적인 방법은 range() 함수와 for 문을 사용하면 된다.
for i in range(1, 6):
    numbers.append(i)


또는 리스트에 직접 range()를 넣을 수도 있다. 
numbers = list(range(1,6))


파이썬에서는 리스트 컴프리헨션을 사용해서 만드는 것을 추천하는 것 같다.
[표현식 for 항목 in 순회 가능한 객체]
numbers = [i for i in range(1, 6)]


리스트 컴프리헨션은 조건 표현식을 포함할 수도 있다. 
[표현식 for 항목 in 순회 가능한 객체 if 조건]
1~10 중 짝수만 저장하는 리스트는 다음과 같이 만들 수 있다.
even = [i for i in range(1, 11) if i % 2 ==0]

또한 리스트 컴프리헨션에 루프를 중첩할 수 도 있다.
numbers = [(i, j) for i in range(1, 5) if i % 2 == 1 
                  for j in range(1, 5) if j % 2 == 0]

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

그리고 중첩된 루프에서도 역시 조건절이 사용 가능하다.
numbers = [(i, j) for i in range(1, 11) if i % 2 == 1                  for j in range(1, 11) if j == i + 1]

(1, 2)
(3, 4)
(5, 6)
(7, 8)
(9, 10)


2. Dictionary comprehension

리스트와 마찬가지로 딕셔너리 또한 컴프리헨션이 있다.
{키 표현식 :  값 표현식 for 표현식 in 순회 가능한 객체}

물론 if와 중첩 루프도 가능하다.

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

('l', 1)
('e', 2)
('t', 2)
('r', 1)
('s', 1)

딕셔너리의 키는 유일한 집합이므로 아래처럼 표현도 가능하다.
word = 'letters'letter_counts = {letter : word.count(letter) for letter in set(word)}

('l', 1)
('e', 2)
('t', 2)
('r', 1)
('s', 1)


3. Set comprehension

셋 또한 컴프리헨션이 있다.
{표현식 for 표현식 in 순회 가능한 객체}

물론 if와 중첩 루프도 가능하다.
odd = {i for i in range(1,11) if i % 2 == 1}

1
3
5
7
9


4. Generator comprehension

튜플은 컴프리헨션이 없다. 리스트 컴프리헨션의 대괄호를 괄호로 바꿔도 에러가 나지 않기 때문에 잘 동작하는 것처럼 보인다. 
괄호 안의 내용은 제너레이터 컴프리헨션이다. 그리고 이것은 제너레이터 객체를 반환한다. 제너레이터는 한 번만 실행될 수 있다. 아래 결과를 보면 확인할 수 있다.
odd = [i for i in range(1,5) if i % 2 == 1]
for i in odd:
    print("1 - ",i)

for i in odd:
    print("2 - ",i)

1 -  1
1 -  3
2 -  1
2 -  3


odd = (i for i in range(1,5) if i % 2 == 1)
for i in odd:
    print("1 - ",i)

for i in odd:
    print("2 - ",i)

1 -  1
1 -  3






종료.

댓글

이 블로그의 인기 게시물

파이참에서 인터프리터 꼬인 경우 처리

경사소실 문제 해결

근무 시작시간과 근무시간 입력 받아 근무 종료시간 반환하는 함수