list comprehension
기존에 존재하는 List 에서 새로운 List 를 간결하게 생성하는 방법
▶ 구조는 크게 5가지로 구분
1. 표현식 + for문 (기본)
result = [표현식 for 변수 in 리스트]
2. 표현식 + for문 + 조건문
result = [표현식 for 변수 in 리스트 조건문]
3. 표현식 + 조건문 + for문
result = [조건문 for 변수 in 리스트]
4. 중첩 for문
result = [조건문 for 변수1 in 리스트1 for 변수2 in 리스트2 ...]
5. 중첩 List Comprehension
☆
<예시> case_1
[표현식 + for문]
- 표현식에 변수 또는 상수를 넣는 경우
n = 5
# n개의 0으로 초기화된 리스트
result = [ 0 for i in range(n) ] # [0, 0, 0, 0, 0]
# 0 ~ n으로 초기화된 리스트
result = [ i for i in range(n) ] # [0, 1, 2, 3, 4]
# array 리스트의 값을 그대로 복사
array = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
result = [ n for n in array ] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- 표현식에 연산식이나 함수를 쓰는 경우
array = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
# array의 제곱값을 구하는 리스트
result = [ n*n for n in array ] # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 문자열 리스트의 각 문자열의 길이를 저장하는 리스트
str_array = [ "List", "Comprehension", "python"]
result = [ len(string) for string in str_array] # [4, 13, 6]
# 5로 나눈 나머지를 저장하는 리스트 - 함수 사용
def mod_5 (number) :
return number % 5
result = [mod_5(n) for n in array] # [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]
☆
<예시> case_2
[표현식 + for문 + 조건문]
# 범위 내 짝수만 저장하는 리스트
result = [ n for n in range(10) if n%2 == 0 ] # [0, 2, 4, 6, 8]
# 범위 내 홀수만 저장하는 리스트
result = [ n for n in range(10) if n%2 != 0 ] # [1, 3, 5, 7, 9]
# 배열에서 양수만 저장하는 리스트
array = [ -1, 0, -4, 24, 5, -10, 2 ]
result = [ n for n in array if n > 0 ] # [24, 5, 2]
조건문이 for문 뒤에 붙는 경우에는 단일 조건문 밖에 못쓴다는 특징이 존재함.
▷ else나 elif를 사용할 경우 문법 오류가 발생.
하지만, if를 여러번 사용하는 것은 가능함. 두 조건문이 and로 묶인 것과 같은 결과.
# 3의 배수 중 홀수만 저장하는 리스트
result = [ n for n in range(50) if n%3 == 0 if n%2 != 0 ]
# [3, 9, 15, 21, 27, 33, 39, 45]
result = [ n for n in range(50) if n%3 == 0 and n%2 != 0 ]
# [3, 9, 15, 21, 27, 33, 39, 45]
☆
<예시> case_3
[표현식 + 조건문 + for문]
# 양수는 그대로, 음수는 0으로 저장하는 리스트
array = [ -1, 0, -4, 24, 5, -10, 2 ]
result = [ n if n>0 else 0 for n in array ] # [0, 0, 0, 24, 5, 0, 2]
# 짝수라면 'even', 홀수라면 'odd'를 저장하는 리스트
array = [0, 1, 2, 3]
result = [ 'even' if n%2== 0 else 'odd' for n in array ]
# ['even', 'odd', 'even', 'odd']
☆
<예시> case_4
[중첩 for문]
가장 밖에 나오게되는 for문부터 순서대로 적으면 됨.
# 중첩 for문
pos = []
for i in range(1, 4) :
for j in range(1, 3) :
pos.append(i*j)
pos = [ i*j for i in range(1, 4) for j in range(1, 3) ] # [1, 2, 2, 4, 3, 6]
☆
<예시> case_5
[중첩 List Comprehension]
2차원 배열도 List Comprehension으로 선언 가능함.
대괄호 안에 다시 대괄호를 넣어서 중첩된 Comprehension을 사용하는 방식.
이런 경우에는 밖에 있는 for문부터 확인.
# 중첩 list comprehension으로 2차원 배열 만들기
result = [ [ 0 for i in range(2) ] for j in range(3) ] # [ [0, 0], [0, 0], [0, 0] ]
'Pworkspace' 카테고리의 다른 글
week2 - 예외 처리 (0) | 2024.04.03 |
---|---|
week2 - zip (0) | 2024.04.03 |
week5 - Function2 (0) | 2024.04.03 |
week2 - list 정렬, 추가 / 관련 메소드 (1) | 2024.03.26 |
week2 - set, list, tuple, dictionary (0) | 2024.03.26 |