List Comprehension
List Comprehension, 리스트 표현식 또는 리스트 조건식이라고 번역합니다. Comprehension은 이해력이라는 뜻입니다. 따라서 List Comprehension은 리스트를 얼마나 이해하고 잘 생성할 수 있는지를 의미하는 것 같습니다.
List Comprehension은 아래와 같이 사용합니다.
[변수 for 변수 in Iterable 객체]
0부터 9까지의 원소를 가진 1차원 리스트를 만들어보겠습니다.
list_a = [i for i in range(10)]
print(list_a)
# 위 코드의 결과값
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
List Comprehension의 장점 중 하나로, 변수의 값을 활용할 수 있다는 점입니다. 0부터 9까지의 수를 제곱한 숫자를 원소로 갖는 1차원 리스트를 만들어보겠습니다.
list_a = [i*i for i in range(10)]
print(list_a)
# 위 코드의 결과값
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
참고로, 리스트만 이렇게 만들 수 있는 것은 아닙니다. Set이나 Tuple, dict와 같은 컬렉션 자료형도 유사한 방법으로 만들 수 있습니다. 우선은 Set만 만들어보겠습니다.
set_a = {i*i for i in range(10)}
print(list_a, type(set_a))
# 위 코드의 결과값
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] <class 'set'>
List Comprehension 응용: 여러 개의 for문 사용
for문을 2번 사용하거나, 2차원 배열을 만들거나, if문을 List Comprehension과 함께 사용할 수 있습니다.
List Comprehension에서 여러 개의 for문을 사용한다면 for문이 실행되는 순서는 오른쪽에서부터 왼쪽으로 차례대로 진행됩니다.
# List Comprehension에서 for문은 무조건 오른쪽에서 왼쪽으로 진행된다.
[변수1과 변수2를 활용 for 변수2 in Iterable for 변수1 in Iterable]
2개의 for문의 변수를 곱해서 1차원 배열의 리스트를 만들어보겠습니다.
# 오른쪽에서부터 왼쪽이므로, 먼저 i의 for문이 실행됩니다.
[i*j for j in [1,2,3] for i in [10,20,30]]
# 위 코드의 결과값
[10, 20, 30, 20, 40, 60, 30, 60, 90]
다음으로는 2차원 배열을 만들어보겠습니다. 2차원 배열은 배열 안의 원소로 배열을 갖는 형태입니다. 따라서 1차원 배열에서 '변수' 자리에 대괄호([])를 씌워주면 됩니다.
# 하나의 for문에 '변수' 자리에 대괄호를 씌워준다.
[[변수1과 변수2를 활용 for 변수2 in Iterable] for 변수1 in Iterable]
이번에도 2개의 for문을 사용하여, 각각의 원소가 곱해진 2차원 배열을 만들어보겠습니다.
[[i*j for j in [1,2,3]] for i in [10,20,30]]
# 위 코드의 결과값
[[10, 20, 30], [20, 40, 60], [30, 60, 90]]
List Comprehension 응용: if 문 사용
다음으로는 if문을 함께 사용해 보겠습니다. if문을 사용하는 규칙은 아래와 같습니다.
[변수 for 변수 in Iterable 조건]
위 조건을 참고하여 2의 배수만 리스트로 만들어보겠습니다.
[i for i in range(10) if i % 2 == 0]
# 위 코드의 결과값
[0, 2, 4, 6, 8]
if문과 else문도 함께 사용할 수 있습니다.
[참 if 조건 else 거짓 for 변수 in Iterable]
2의 배수이면 999, 2의 배수가 아니면 원래의 값을 원소로 하는 리스트를 만들어보겠습니다.
[999 if i%2 == 0 else i for i in range(1,11)]
# 위 코드의 결과값
[1, 999, 3, 999, 5, 999, 7, 999, 9, 999]
'Python > 기초' 카테고리의 다른 글
[파이썬/Python] enumerate와 zip에 대한 깔끔한 정리 (0) | 2023.07.08 |
---|---|
[파이썬/Python] 함수의 정의와 활용에 대한 완벽 정리 (0) | 2023.07.08 |
[파이썬/Python] 파일 쓰고 읽기: 파일 객체에 대한 총정리 (0) | 2023.07.07 |
[파이썬/Python] Iterable과 Iterator 객체를 만들어 보자. (0) | 2023.07.06 |
[파이썬/Python] Iterable과 Iterator에 대한 명쾌한 정리 (0) | 2023.07.06 |
댓글