language/Python

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

스파이디웹 2022. 3. 2. 14:16
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