[Python] List

Poke·2024년 5월 2일

List Comprehension

예를들어, 어떤 정수로 이루어진 리스트에서 짝수값만 새로운 목록을 만들고 싶을때
list comprehension을 사용하지 않으면 다음과 같은 for문+조건문을 사용해야한다.

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 짝수만 넣기 위한 빈 리스트 생성
even = []

for i in my_list:
    if i % 2 == 0:
        # even 리스트에 값 추가
        even.append(i)

print(even)
[2, 4, 6, 8, 10]

위의 코드를 list comprehension문법을 사용하면 한 줄의 코드로 만들 수 있다.

even = [i for i in my_list if i % 2 == 0]

이때 반환값은 even이라는 새로운 List를 만들고 기존의 mylist는 변경되지 않는다.

list comprehension의 기본구조

new_list = [expression for item in iterable if condition]
# expression : 리스트의 새 요소를 생성하기 위해 각 item에 적용되는 표현식
# for item in iterable : iterable에서 각 요소를 순차적으로 item 변수에 대입함. iterable은 리스트, 튜플, 딕셔너리 등이 될 수 있음.
# if condition : 각 요소에 대해 평가되며, 참(True)인 경우에만 해당 요소를 새 리스트에 포함시킴.

# 조건문은 생략가능하다. 모든 요소를 포함하여 새로운 리스트 생성.
new_list = [expression for item in iterable]

여기서 expression에 조건부 표현식을 추가할 수 있다.

# 기본구조
new_list = [expression1 if condition else expression2 for item in iterable]
# expression1 : 조건이 참(True)일때 사용될 표현식
# if condition : 조건이 참(True)일때 expression1, 거짓(False)일때 expression2가 사용됨.
# expression2 : 조건이 거짓(False)일때 사용될 표현식
# 예시
# 요소가 짝수이면 '짝수', 홀수이면 '홀수' 입력하기
new_list = ["짝수" if x % 2 == 0 else "홀수" for x in my_list]

print(new_list)
['홀수', '짝수', '홀수', '짝수', '홀수', '짝수', '홀수', '짝수', '홀수', '짝수']

여기서 조건부 표현식과 필터링을 동시에 사용할 수 있다.
특정조건을 만족하는 요소에 대해 값을 변경하고, 다른 조건을 만족하는 요소만 포함.

# 기본구조
new_list = [expression1 if condition1 else expression2 for item in iterable if condition2]
# condition1: 요소가 리스트에 포함될때 어떤 값으로 포함될지 결정
# condition2: 해당 요소가 최종 리스트에 포함될지 여부를 결정
# 예시
# 리스트에서 짝수인 요소만 뽑고, 요소가 보다 작으면 'small', 크면 'large'를 반환
new_list = ["small" if x < 5 else "large" for x in my_list if x % 2 == 0]
['small', 'small', 'large', 'large', 'large']

다중루프
list comprehension은 중첩된 루프를 하나의 표현식안에 포함시킬 수 있다.

new_list = [expression for item1 in iterable1 for item2 in iterable2 ...]
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']

# 두 리스트의 모든 가능한 쌍을 생성하기
my_list = [(num, char) for num in list1 for char in list2]

print(my_list)
[(1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c'), (3, 'a'), (3, 'b'), (3, 'c')]
# 2단부터 9단까지 구구단 결과값 출력하기
# 가독성을 위해 들여쓰기를 하자
my_list = [i * j for j in range(2, 10)
           for i in range(1, 10)]
print(my_list)
[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]

0개의 댓글