[Python] 4. 리스트 컴프리헨션
본 포스팅은 “윤성우의 열혈 파이썬 중급편” 책 내용을 기반으로 작성되었습니다. 잘못된 내용이 있을 경우 지적해 주시면 감사드리겠습니다.
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_alc 과 korean_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