티스토리 뷰

리스트 컴프리헨션 (List Comprehension)

파이썬은 리스트 컴프리헨션(list comprehensions, 리스트 함축)이라는 개념을 지원한다. 다음과 같은 형식을 가진다.

위의 형식을 풀어쓴다면 다음과 같다. 

new_list = []
for i in old_list:
    if filter(i):
        new_list.append(expression(i))

다음 예제와 같이 사용할 수 있다.

>>> [x**2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

다음은 조건이 붙는 리스트 컴프리헨션 예제이다.

>>> [x for x in range(10) if x%2 == 0]
[0, 2, 4, 6, 8]

숫자가 아닌 자료형에 대해서도 적용할 수 있다. 예를 들어 단어의 첫 글자만 추출하여 리스트를 만드는 예제를 만들어 보자.

>>> list1 = ["All", "good", "things", "must", "come", "to", "an", "end"]
>>> [word[0] for word in list1]
['A', 'g', 't', 'm', 'c', 't', 'a', 'e']

다음은 문자열을 구성하는 단어를 추출하여 단어의 길이를 계산하고 이것을 새로운 리스트로 생성하는 예제이다.

>>> word_list = 'Document your chickens before they are hatched'.split()
>>> [len(w) for w in word_list]
[8, 4, 8, 6, 4, 3, 7]

리스트 컴프리헨션은 2개의 집합의 상호곱 형태로도 표현할 수 있다. 

>>> colors = ["white", "silver", "black"]
>>> cars = ["bmw5", "sonata", "malibu", "sm6"]
>>> [(x, y) for x in colors for y in cars]
[('white', 'bmw5'), ('white', 'sonata'), ('white', 'malibu'), ('white', 'sm6'), ('silver', 'bmw5'), ('silver', 'sonata'), ('silver', 'malibu'), ('silver', 'sm6'), ('black', 'bmw5'), ('black', 'sonata'), ('black', 'malibu'), ('black', 'sm6')]

위 예제는 colors 리스트의 원소와 cars 리스트의 원소가 하나씩 짝지어져서 튜플이 되고 이 튜플이 모여서 리스트가 된다.

 

딕셔너리 컴프리헨션 (Dictionary Comprehension)

딕셔너리 컴프리헨션은 새로운 딕셔너리를 생성하는 우아하고 간결한 방법이며 리스트 컴프리헨션과 매우 유사하다. { } 안의 (key: value) 와 for 문장으로 이루어진다. 다음은 0에서 5까지의 정수로부터 3제곱 값을 생성하는 코드이다.

>>> { x: x**3 for x in range(6) }
{0: 0, 1: 1, 2: 8, 3: 27, 4: 64, 5: 125}

 



'Python' 카테고리의 다른 글

[Python] sort()와 sorted()로 정렬하기  (0) 2018.10.27
[Python] 클래스와 객체  (0) 2018.10.27
[Python] 리스트의 기초 연산들  (0) 2018.10.27
[Python] 시퀀스 자료형  (0) 2018.10.27
[Python] lambda 함수(무명 함수)  (0) 2018.10.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크