[Python] 리스트 내포 / 이중 리스트 내포 with IF문
- 언어/Python
- 2019. 3. 22. 15:09
파이썬에서는 For 문과 If 문을 한 라인에 작성하여 코드를 직관적으로 만들고, 실행 속도도 높여주는 방법이 있습니다.
리스트 내포(List comprehension)이라는 기법인데요, 그 문법은 다음과 같습니다.
iterable_object = [item_expression for item in iterable_list if item_condition]
위 리스트 내포식의 의미는 iterable_list
에 있는 요소 하나하나(item
)에 대해 item_condition
을 만족하는 요소들을 item_expression
식을 적용하여 iterable 한 Object (iterable_object
)로 만들어서 반환한다는 의미입니다.
<예제>
구구단 3단을 출력하되 짝수가 아닌 것만 출력해봅시다.
gugu_three = [x * 3 for x in range(9) if x % 2 is not 0]
# [3, 9, 15, 21]
그렇다면, 중첩 for문은 어떻게 사용할까요? 이번에는 구구단의 결과값을 모두 출력하는 예제로 알아보겠습니다.
gugudan = [x * y for x in range(1, 10) for y in range(1, 10)]
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]
위 코드는 다음 코드와 동일한 기능을 수행합니다.
gugudan = []
for x in range(1, 10):
for y in range(1, 10):
gugudan.append(x * y)
처음 나오는 for문이 바깥에, 나중에 나오는 for문이 안쪽에 있는 모양으로 생각하시면 됩니다.
이제는, 구구단 3단과 7단만 출력해볼까요?
gugudan_three_seven = [x * y for x in range(1, 10) if x is 3 or x is 7 for y in range(1, 10)]
# [3, 6, 9, 12, 15, 18, 21, 24, 27, 7, 14, 21, 28, 35, 42, 49, 56, 63]
위 코드는 다음 코드와 동일한 기능을 수행합니다.
gugudan_three_seven = []
for x in range(1, 10):
if x is 3 or x is 7:
for y in range(1, 10):
gugudan_three_seven.append(x * y)
마지막으로, 바깥쪽의 요소가 안쪽의 요소보다 더 큰 조건 (x > y 인 조건) 에서만 값을 출력해보겠습니다.
gugudan_strange = [x * y for x in range(1, 10) for y in range(1, 10) if x > y]
위 코드는 다음 코드와 동일한 기능을 수행합니다.
gugudan_strange = []
for x in range(1, 10):
for y in range(1, 10):
if x > y:
gugudan_strange.append(x * y)
레퍼런스
'언어 > Python' 카테고리의 다른 글
[Python] 파이썬 작업 실행시간 측정하기 (0) | 2019.04.24 |
---|---|
[Python] yield 문이란 무엇인가 ?! (0) | 2019.03.25 |
[Python] sys 모듈을 이용하여 표준입력으로부터 입력 받기 (0) | 2019.03.20 |
[Python] sys 모듈을 이용하여 실행 인자값 받기 ! (0) | 2019.03.20 |