2 minute read

본 포스팅은 “윤성우의 열혈 파이썬 중급편” 책 내용을 기반으로 작성되었습니다. 잘못된 내용이 있을 경우 지적해 주시면 감사드리겠습니다.

4-1. 리스트 생성 방법

다음과 같이 for문을 활용하여 3, 6, 9를 요소로 갖는 리스트를 만들 수 있다.

v1 = [1, 2, 3]
v2 = []
for i in v1:
    v2.append(i * 3)
v2
(결과) [3, 6, 9]

그런데 for문을 사용하려니 좀 귀찮다. 더 짧게 만들어보자!

v1 = [1, 2, 3]
v2 = [x * 3 for x in v1]
v2
(결과) [3, 6, 9]

이것이 바로 리스트 컴프리헨션(Comprehension) 이다!

문법을 설명하자면 다음과 같다.
[x * 3 for x in v1] → v1의 요소들을 하나씩 x에 넣음
[x * 3 for x in v1] → x * 3의 결과를 산출하여 리스트에 저장

4-2. 조건 필터 추가하기

리스트 컴프리헨션을 사용하는데, 만약 v1의 홀수 값만 활용하여 v2를 만들고 싶다면?
다음과 같이 조건 필터를 추가하자!

v1 = [1, 2, 3]
v2 = [x * 3 for x in v1 if x % 2] # 홀수면 x % 2 결과가 1이 나오고, 이는 True로 인식된다.
v2
(결과) [3, 9]

문법을 설명하자면 다음과 같다.
[x * 3 for x in v1 if x % 2] → v1의 요소들을 하나씩 x에 넣음
[x * 3 for x in v1 if x % 2] → x % 2가 True(0이 아님) 인지 확인!
[x * 3 for x in v1 if x % 2] → x * 3의 결과를 산출하여 리스트에 저장

4-3. 이중 for 문을 활용한 리스트 컴프리 헨션

만약 다음과 같이 이중 for문으로 리스트를 생성한다 하자.

foreign_alc = ['Beer', 'Wine']
korean_alc = ['막걸리', '복분자주', '소주']
comb_alc = []
for a in foreign_alc:
    for b in korean_alc:
        comb_alc.append(a + '+' + b)
comb_alc
(결과) ['Beer+막걸리', 'Beer+복분자주', 'Beer+소주', 'Wine+막걸리', 'Wine+복분자주', 'Wine+소주']

엄청나게 귀찮지 않을까? ㅠㅠ
이 또한 리스트 컴프리헨션으로 생성 가능하다!

foreign_alc = ['Beer', 'Wine']
korean_alc = ['막걸리', '복분자주', '소주']
comb_alc = [a+'+'+b for a in foreign_alc for b in korean_alc]
(결과) ['Beer+막걸리', 'Beer+복분자주', 'Beer+소주', 'Wine+막걸리', 'Wine+복분자주', 'Wine+소주']

4-4. 이중 for 문에 조건 필터 추가한 리스트 컴프리헨션

이중 for문 리스트 컴프리헨션에 조건필터 추가도 가능하다.
만약 foreign_alckorean_alc 리스트의 홀수 번째 요소만 활용하고자 한다면?

foreign_alc = ['Beer', 'Wine']
korean_alc = ['막걸리', '복분자주', '소주']
comb_alc = [foreign_alc[i]+'+'+korean_alc[j] for i in range(0, len(foreign_alc)) for j in range(0, len(korean_alc)) if (i % 2 == 0 and j % 2 == 0)]
(결과) ['Beer+막걸리', 'Beer+소주']

물론 다음과 같이 if 문을 넣어도 된다.

foreign_alc = ['Beer', 'Wine']
korean_alc = ['막걸리', '복분자주', '소주']
comb_alc = [foreign_alc[i]+'+'+korean_alc[j] for i in range(0, len(foreign_alc)) if (i % 2 == 0) for j in range(0, len(korean_alc)) if (j % 2 == 0)] # if문 순서 주목!
(결과) ['Beer+막걸리', 'Beer+소주']

Leave a comment