python Comprehension
1. List comprehension
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
종료.
댓글
댓글 쓰기