: 쉽고 간결하게 List를 만들 수 있는 Python의 문법

result에 새로운 리스트가 저장되는 과정은 위의 그림과 같다.
즉, 표현식과 for 반복문을 통해 리스트를 한 줄로 정의할 수 있는 것이다.
new_list = [ 0 for i in range(5) ] # => [0, 0, 0, 0, 0]new_list = [ i for i in range(5) ] # => [0, 1, 2, 3, 4]list1 = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
new_list = [ n for n in list1 ] # => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]다른 리스트의 제곱값을 구하는 리스트 생성하기
list1 = [0, 1, 2, 3, 4]
new_list = [ n*n for n in list1 ] # => [0, 1, 4, 9, 16]
문자열 리스트의 각 문자열 길이를 저장하는 리스트 생성하기
str_list = [ "List", "Comprehension", "python"]
new_list = [ len(string) for string in str_array] # => [4, 13, 6]
5로 나눈 나머지를 저장하는 리스트 생성하기
list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 5로 나눈 나머지를 return하는 함수 생성
def mod_5 (number) :
return number % 5
# 표현식에 함수 활용
result = [mod_5(n) for n in list1] # [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]

유형 1에서 조건문이 하나 더 붙은 유형이다.
new_list = [ n for n in range(10) if n%2 == 0 ] # => [0, 2, 4, 6, 8]list1 = [ -1, 0, -4, 24, 5, -10, 2 ]
new_list = [ n for n in array if n > 0 ] # => [24, 5, 2]💡 주의!
이런 표현 방법이 매우 편리하긴 하지만, 조건문을 100% 자유롭게 활용할 수 있는 것은 아니다.
단일 조건문만 사용이 가능하다. 즉,
else나elif를 사용할 경우에는 문법 오류가 난다.그렇지만
if를 여러 번 사용하는 것은 가능하다. 이 경우에는 두 조건문이 and로 묶인 것과 같은 결과가 나온다.# 예시 : 3의 배수 중 홀수만 저장하는 리스트 생성하기 # 방법 1. if를 두 번 사용 new_list = [ n for n in range(50) if n%3 == 0 if n%2 != 0 ] # => [3, 9, 15, 21, 27, 33, 39, 45] # 방법 2. 두 if 조건문을 and로 연결 new_list = [ n for n in range(50) if n%3 == 0 and n%2 != 0 ] # => [3, 9, 15, 21, 27, 33, 39, 45]

list1 = [-1, 10, -4, 0, 24, 5, -10, 2]
new_list = [n if n>0 else 0 for n in list1] # => [0, 10, 0, 0, 24, 5, 0, 2]list1 = [0, 1, 2, 3]
new_list = ['even' if n%2==0 else 'odd' for n in list1] # => ['even', 'odd', 'even', 'odd']💡 주의
이 경우에는if와else를 사용할 수 있다!

중첩된 for문도 list comprehension 안에서 사용할 수 있다.
i*j를 원소로 넣는 리스트 생성 (i = 1~3, j = 1~2)pos = [ i*j for i in range(1, 4) for j in range(1, 3) ] # => [1, 2, 2, 4, 3, 6]
다차원 배열도 List Comprehension으로 선언할 수 있다. 대괄호[] 안에 다시 대괄호[]를 넣어 중첩된 List Comprehension을 사용하는 방식이다.
이때, 밖에 있는 for문부터 확인해나간다.
result = [ [ 0 for i in range(2) ] for j in range(3) ] # => [ [0, 0], [0, 0], [0, 0] ]참고자료