5. 리스트 표현식 사용하기
- 파이썬은 리스트 안에 for 반복문과 if 조건문을 사용할 수 있다는 특이점을 가지고 있다.
- 이렇게 리스트 안에 식, for 반복문, if 조건문 등을 지정하여 리스트를 생성하는 것을 리스트 컴프리헨션(list comprehension)이라고 한다.(여기서는 리스트 표현식이라고 칭하겠음)
- 리스트 표현식 : 식으로 지정해서 생성된 것을 리스트로 잡아두는 것이다.
- 리스트 표현식은 다음과 같이 리스트 안에 식, for 반복문을 지정하는데, 여러 줄의 코드를 한 줄로 줄일 수 있다는 장점이 있다.
- 뒤에서 앞으로 읽는 것이 간단하다. → range(10)으로 0부터 9까지 생성하여 변수 i에 숫자를 꺼내고, 최종적으로 i를 이용하여 리스트를 만든다는 의미# [식 for 변수 in 리스트] # list(식 for 변수 in 리스트) >>> a = [i for i in range(10)] # 0부터 9까지 숫자를 생성하여 리스트 생성 >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> b = list(i for i in range(10)) # 0부터 9까지 숫자를 생성하여 리스트 생성 >>> b [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- [i for i in range(10)]는 변수 i를 그대로 사용하지만 다음과 같이 식 부분에서 i를 다른 값과 연산하면 각 연산의 결과를 리스트로 생성한다.
>>> c = [i + 5 for i in range(10)] # 0부터 9까지 숫자를 생성하면서 값에 5를 더하여 리스트 생성 >>> c [5, 6, 7, 8, 9, 10, 11, 12, 13, 14] >>> d = [i * 2 for i in range(10)] # 0부터 9까지 숫자를 생성하면서 값에 2를 곱하여 리스트 생성 >>> d [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
※ 리스트 표현식은 list(식 for 변수 in 리스트)처럼 list로 만들 수도 있지만 파이썬에서는 대괄호 방식을 사용하는 것이 좋다.
5-1. 리스트 표현식에서 if 조건문 사용하기
- 리스트 표현식에서 if 조건문은 for 반복문 뒤에 지정한다.
- 아래와 같이 for 반복문 뒤에 if 조건문을 지정하면, 숫자를 생성한 뒤 if 조건문에서 특정 숫자만 뽑아내 리스트를 생성한다.
# [식 for 변수 in 리스트 if 조건식] # list(식 for 변수 in 리스트 if 조건식) >>> a = [i for i in range(10) if i % 2 == 0] # 0~9 숫자 중 2의 배수인 숫자(짝수)로 리스트 생성 >>> a [0, 2, 4, 6, 8]
- 또는 i 를 다른 값과 연산하여 리스트를 만들어도 된다.
>>> b = [i + 5 for i in range(10) if i % 2 == 1] # 0~9 숫자 중 홀수에 5를 더하여 리스트 생성 >>> b [6, 8, 10, 12, 14]
5-2. for 반복문과 if 조건문 여러 번 사용하기
- 리스트 표현식은 for과 if를 여러 번 사용할 수 있다.
[식 for 변수1 in 리스트1 if 조건식1 for 변수2 in 리스트2 if 조건식2 ... for 변수n in 리스트n if 조건식n] list(식 for 변수1 in 리스트1 if 조건식1 for 변수2 in 리스트2 if 조건식2 ... for 변수n in 리스트n if 조건식n)
- 다음은 for과 if를 여러 번 사용하여 구구단 리스트를 생성한 것이다.
>>> a = [i * j for j in range(2, 10) for i in range(1, 10)] # 2부터 9까지 1~9의 숫자를 곱함 >>> a [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]
- 이때 코드는 여러 줄로 입력해도 되고, 들여쓰기는 해도 되고 하지 않아도 된다(가독성을 위해 하는걸 추천).
a = [i * j for j in range(2, 10) for i in range(1, 10)]
- 리스트 표현식에 for가 여러 개이면 뒤에서 앞으로 처리한다.
'Python 코딩도장' 카테고리의 다른 글
파이썬 코딩도장 Unit 23 정리(1) - 2차원 리스트 생성 후 요소에 접근하기 (0) | 2022.01.24 |
---|---|
파이썬 코딩도장 Unit 22 정리(6) - 리스트에 map 사용, 튜플 응용 (0) | 2022.01.23 |
파이썬 코딩도장 Unit 22 정리(3) - 리스트(튜플)의 최대/최소값, 합계 (0) | 2022.01.20 |
파이썬 코딩도장 Unit 22 정리(2) : 리스트 (0) | 2022.01.19 |
파이썬 코딩도장 Unit 22 정리(1) : 리스트 조작 (0) | 2022.01.18 |