본문 바로가기
language/Python

[Python] list comprehension이란? set, dictionary comprehension이란? 개념과 예제

by 스파이디웹 2022. 3. 2.
728x90

1. list comprehension이란?

기존의 리스트 생성하는 방법을 편리하게 쓰는 문법

기존의 리스트를 생성하여 값을 입력하는 방법은 다음과 같습니다.

numbers = []
for n in range(0, 10):
    numbers.append(n)

이러한 코드를 list comprehension이라는 문법으로 바꾸어보면

numbers_2 = [x for x in range(10)]


2. 다양한 list comprehension 예제 

list comprehension은 for문에서 반복되는 변수를 콜론(:)다음에 줄을 바꿔 들여쓰기하는것이 아니라, for문앞에 작성

또한 list comprehension은 반복되는 변수에 여러가지 조건을 걸어줄 수 있습니다.

# list comprehension 문법 예제 2 입력될 값에 곱하기
"""
#이 코드는 아래와 같이 바꾸어 사용할 수 있다.
numbers_3 = []
for x in range(0, 10):
    numbers_3.append(x*2)
print(numbers_3)
"""

numbers_3 = [x*2 for x in range(10)]
print(numbers_3)
#[0,2,4,6,8,10,12,14,16,18] 출력

list comprehension 문법에 자체적으로 조건을 걸 수도 있습니다.

even_numbers = []
for n in range(1, 10+1):
    if n % 2 == 0:
        even_numbers.append(n)
        
#다음과 같다
[x for x in range(1, 10+1) if x % 2 == 0]

for문을 중첩해서 작성 할 수도있고, 중복된 if문을 사용할 수도 있습니다.

#다중 if문
[ x for x in range(10) if x < 5 if x % 2 == 0 ]

#다중 for문
[ (x, z, y) for x in ['쌈밥', '치킨', '피자'] for y in ['사과', '아이스크림', '커피'] for z in ['배달 시키기', '가서 먹기']]
  • for문이 작동하는 순서는 왼쪽에 있는 for문이 먼저 작동

다음과 같이 새로운 list를 작성할 수도 있습니다.

# list comprehension 문법 예제 3 리스트에 함수를 적용하여 새로운 list 생성
"""
#이 코드는 아래와 같이 바꾸어 사용할 수 있다.
names = ["SPIDY","WEB"]
lower_names = []
for i in names:
    lower_names.append(i.lower())
print(lower_names)
"""

names = ["SPIDY","WEB"]
lower_names = [name.lower() for name in names]
print(lower_names)
#['spidy', 'web']출력

3. set comprehension, dictionary comprehension이란?

set comprehension은 기존의 list comprehension을 {}로 바꾸게되면 set comprehension으로 바뀌게 되는데, 그게 set comprehension입니다.

#list comprehension 그리고 set comprehension 결과값 비교
#set는 중복된 값을 표현하지 않는다.
print([x+y for x in range(10) for y in range(10)])
print({x+y for x in range(10) for y in range(10)})

#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
#{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18} 출력

마찬가지로  dictionary comprehension도 list comprehension과 같이 dictionary를 만드는 문법입니다.

students = ['철수', '영희', '길동', '순희']
print({student: 0 for student in students})
#{'철수': 0, '영희': 0, '길동': 0, '순희': 0}출력

 

scores = {'철수': 50, '영희': 80, '길동': 90, '순희': 60, '전학생': 100}
scores = { name: score for name, score in scores.items() if name != '전학생'}
print(scores)
#{'철수': 50, '영희': 80, '길동': 90, '순희': 60}출력

zip 함수를 활용한 dictionary comprehension도 가능합니다.

https://spidyweb.tistory.com/342

# dictionary comprehension 예제 2, 리스트 2개를 zip으로 묶어 x를 key로 y를 value로 입력
students = ['철수', '영희', '길동', '순희']
scores = [50,60,80,90]
dict_compre = {x:y for x, y in zip(students,scores)}
print(dict_compre)
#{'철수': 50, '영희': 60, '길동': 80, '순희': 90} 출력

values에 들어갈 값을 점수-평균과 같이 설정할 수도 있습니다.

# dictionary comprehension 예제 3, 기존의 dictionary로 부터 새로운 dictionary 생성(자신의 점수 - 평균점수)
scores_1 = {'철수': 50, '영희': 80, '길동': 90, '순희': 60, '전학생': 100}
print({name: score-sum(scores_1.values())/len(scores_1) for name, score in scores_1.items()})

출처:

https://wikidocs.net/22805

https://wikidocs.net/84393

728x90

댓글